如何防止部分查询与searchkick和word_start匹配

时间:2014-05-01 00:01:56

标签: ruby-on-rails elasticsearch searchkick

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

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

它似乎没有帮助。

1 个答案:

答案 0 :(得分:2)

使用默认:word,“广告”应与“移动广告”匹配。由于misspellings,“点击通话”的不良结果可能会被归还,请尝试将其设置为false并查看是否会减少噪音。

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