我将 Sphinx 与 Thinking Sphinx 插件一起使用。我使用以下代码(以及 rakethinking_sphinx:index 命令)对名为 Venue 的模型建立了索引
define_index do
indexes :name
indexes city
indexes zip
end
我使用以下代码在控制器中获得结果:
@venues = Venue.search params[:search]
我将它们渲染为 json。我遇到的问题是,当我点击这个网址时:
http://localhost:3000/venue/list?search=Baltimo
我什么也没得到。但是当我点击这个网址时:
http://localhost:3000/venue/list?search=Baltimor
我得到了位于巴尔的摩市的所有场馆。出于某种原因,一个角色会产生影响。从理论上讲,如果我只用一个字符 - 'b' 进行搜索,我应该获得巴尔的摩的所有场馆
有谁知道这是怎么回事?
谢谢
除非你有enable_star
设置为 1 并且min_prefix_len
or min_infix_len
设置为 1 或更多,您将无法获得 B 来匹配 Baltimore(即使如此,我认为您需要搜索 B* 才能获得匹配)。
这里发生的情况是,默认情况下,Thinking Sphinx 告诉 Sphinx 使用英语词干分析器,这允许similar单词(按字符,而不是按含义)被视为匹配,所以它把Baltimor and 巴尔的摩在同一个篮子里。
如果你想匹配任何单词的任何部分,那么你需要在 config/sphinx.yml 中添加如下内容:
development:
enable_star: 1
min_infix_len: 1
test:
enable_star: 1
min_infix_len: 1
production
enable_star: 1
min_infix_len: 1
然后停止 Sphinx,重新索引,然后重新启动 Sphinx。完成此操作后,搜索 B* 应返回 Baltimore。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)