Sphinx返回糟糕的搜索结果

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'

有谁知道这里发生了什么?

谢谢

pat*_*pat 6

除非你enable_star设置为1 min_prefix_lenmin_infix_len设置为1或更多,否则你不会得到B来匹配巴尔的摩(即便如此,我认为你需要搜索B*来获得匹配).

这里发生的事情是,默认情况下,Thinking Sphinx告诉Sphinx使用英语词干分析器,它允许类似的单词(按字符,而不是意义)被视为匹配,因此它将BaltimorBaltimore放在同一个篮子里.

如果你想获得任何单词匹配的任何部分,那么你需要在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*应该返回巴尔的摩.

希望这可以帮助.