ruby-on-rails – 如何使用searchkick和word_start防止部分查询匹配

我确信有办法做到这一点,但我必须遗漏一些东西.这是我的基本设置:

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}])

我最终得到了一大堆不良结果,即“玩具”,“工具”,“触摸”.大概是因为令牌’to’匹配这些词的开头.我不能使用text_start,因为我希望“广告”与“移动广告”相匹配.理想情况下,我只想阻止查询的部分匹配,但允许对索引进行部分匹配.

我试过报价:

Tag.search('"click to talk"', fields:[{name: :word_start}])

它似乎没有帮助.

最佳答案 使用默认:字词,“广告”应与“移动广告”匹配.由于拼写错误,“点击通话”的不良结果可能会被返回,尝试将其设置为false并查看是否可以消除噪音.

Tag.search("click to talk", fields: [:name], misspellings: false)
点赞