Ton*_*ony 5 ruby sphinx ruby-on-rails thinking-sphinx
我正在使用Sphinx和Thinking Sphinx插件.我用以下代码索引了一个名为Venue的模型(和rake thinking_sphinx:index命令)
define_index do
indexes :name
indexes city
indexes zip
end
Run Code Online (Sandbox Code Playgroud)
我使用以下代码在控制器中获取结果:
@venues = Venue.search params[:search]
Run Code Online (Sandbox Code Playgroud)
我将它们渲染为json.我遇到的问题是,当我点击此网址时:
http://localhost:3000/venue/list?search=Baltimo
Run Code Online (Sandbox Code Playgroud)
我一无所获.但是当我点击此网址时:
http://localhost:3000/venue/list?search=Baltimor
Run Code Online (Sandbox Code Playgroud)
我得到了位于巴尔的摩市的所有场地.出于某种原因,一个角色有所作为.从理论上讲,如果我只搜索一个角色,我应该在巴尔的摩获得所有场地 - 'b'
有谁知道这里发生了什么?
谢谢
除非你enable_star设置为1 min_prefix_len或min_infix_len设置为1或更多,否则你不会得到B来匹配巴尔的摩(即便如此,我认为你需要搜索B*来获得匹配).
这里发生的事情是,默认情况下,Thinking Sphinx告诉Sphinx使用英语词干分析器,它允许类似的单词(按字符,而不是意义)被视为匹配,因此它将Baltimor和Baltimore放在同一个篮子里.
如果你想获得任何单词匹配的任何部分,那么你需要在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
Run Code Online (Sandbox Code Playgroud)
然后停止Sphinx,重新索引并重新启动Sphinx.一旦你完成了,那么搜索B*应该返回巴尔的摩.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
884 次 |
| 最近记录: |