5

我正在使用带有 Thinking Sphinx 插件的 Sphinx。我使用以下代码(和 rake thinking_sphinx:index 命令)索引了一个名为 Venue 的模型

define_index do
    indexes :name
    indexes city
    indexes zip
end

我使用以下代码在我的控制器中获得结果:

@venues = Venue.search params[:search]

我将它们渲染为 json。我遇到的问题是,当我点击这个 URL 时:

http://localhost:3000/venue/list?search=Baltimo

我什么都得不到。但是当我点击这个网址时:

http://localhost:3000/venue/list?search=Baltimor

我得到了位于巴尔的摩市的所有场地。出于某种原因,一个角色会有所作为。从理论上讲,如果我只搜索一个字符 - 'b',我应该得到巴尔的摩的所有场地

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

谢谢

4

1 回答 1

6

除非您已enable_star设置为 1min_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

然后停止 Sphinx,重新索引,然后重新启动 Sphinx。完成此操作后,搜索 B* 应返回巴尔的摩。

希望这可以帮助。

于 2009-04-16T00:07:51.733 回答