gpt4 book ai didi

mysql - Rails 中的搜索逻辑,希望在没有 gem 的情况下使其更加精确

转载 作者:行者123 更新时间:2023-11-29 07:57:07 24 4
gpt4 key购买 nike

有没有办法改进 Rails 中的搜索逻辑。例如,目前如果我搜索“红色皮革”,则搜索会匹配红色或皮革。您如何改进搜索逻辑,以便如果我搜索“红色皮革”,我不会得到“红色狗”,而是说“红色皮革外套”。理想情况下,我想在没有 gem 的情况下做到这一点。我正在使用 MySQL 和 Rails 4。

这里是我的搜索功能的示例

 if params[:search_term].present? && params[:search_term].length > 1
@candidates = @candidates.where("title like ?","%#{params[:search_term]}%")
end

更新

我搜索“黑猫”(我的数据库中没有黑猫),我得到了这些......

1m Single Bolster Black Velvet 
1m Straight Back Black Velvet
70cm Straight Back Black Velvet

包含 cat 应该会否定这些结果......

最佳答案

您可以尝试按空格分割搜索词,并为每个搜索词调用 where 。在 Arel 中,这将继续使用 AND 添加过滤器到您的 sql...

假设您的模型称为 Candidate

query = Candidate
params[:search_term].split(' ').each do |term|
query = query.where('title like %?%', term)
end
# check it's worked
puts query.to_sql
result = query.all

这应该可以满足您的要求。 “红色皮革”应该找到“一件红色皮革外套”或“一件带红色口袋的皮革外套”

不过,作为编码实践的问题,这实际上应该是模型中的方法,而不是 Controller 中的方法。就像这样:

def Candidate.search(search_term)
query = Candidate
params[:search_term].split(' ').each do |term|
query = query.where('title like %?%', term)
end
result = query.all
end

然后在你的 Controller 中:

def search
@candidates = Candidate.search(params[:search_term])
end

这意味着您可以在其他地方使用该方法,例如,作为 rake 任务的一部分,或者在控制台中,如果您发现该方法有问题,或者想要改进您的搜索方法,这对于调试非常有用。

关于mysql - Rails 中的搜索逻辑,希望在没有 gem 的情况下使其更加精确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24875522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com