我确定有办法做到这一点,但我必须遗漏一些东西。这是我的基本设置:
class Tag < ActiveRecord::Base
searchkick word_start: [:name]
end
当我这样搜索时:
Tag.search('advertising', fields:[{name: :word_start}])
一切都很好。但是,当查询包含多个单词时:
Tag.search('click to talk', fields:[{name: :word_start}])
我最终得到了一大堆不良后果,例如&#39; Toys&#39; Tools&#39; Tools&#39; Touch&#39; 。大概是因为令牌&#39; <#em;&#39; 匹配这些词的开头。我无法使用text_start
,因为我希望&#39;广告&#39; 与&#39;移动广告&#39; 相匹配。理想情况下,我只想阻止查询的部分匹配,但允许对索引进行部分匹配。
我试过报价:
Tag.search('"click to talk"', fields:[{name: :word_start}])
它似乎没有帮助。
答案 0 :(得分:2)
使用默认:word
,“广告”应与“移动广告”匹配。由于misspellings
,“点击通话”的不良结果可能会被归还,请尝试将其设置为false
并查看是否会减少噪音。
Tag.search("click to talk", fields: [:name], misspellings: false)