我确定有办法做到这一点,但我一定遗漏了一些东西。这是我的基本设置:
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}])
这似乎没有帮助。
最佳答案
使用默认的 :word
,'advertising' 应该匹配 'mobile advertising'。由于 拼写错误
,“点击通话”的不良结果可能会返回,请尝试将其设置为 false
,看看它是否能消除干扰。
Tag.search("click to talk", fields: [:name], misspellings: false)
关于ruby-on-rails - 如何防止与 searchkick 和 word_start 的部分查询匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23400109/