【问题标题】:Sphinx returning bad search results狮身人面像返回错误的搜索结果
【发布时间】:2009-04-15 23:12:11
【问题描述】:

我正在使用带有 Thinking Sphinx 插件的 Sphinx。我使用以下代码(和 rake thinking_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',我应该得到巴尔的摩的所有场地

有人知道这里发生了什么吗?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby sphinx thinking-sphinx


    【解决方案1】:

    除非您将 enable_star 设置为 1 并且将 min_prefix_lenmin_infix_len 设置为 1 或更多,否则您不会得到 B 来匹配 Baltimore(即使那样,我认为您需要搜索 B* 来获得比赛)。

    这里发生的情况是,默认情况下,Thinking Sphinx 告诉 Sphinx 使用英语词干分析器,它允许将 相似 词(按字符,而不是按含义)视为匹配,所以它把 巴尔的摩和巴尔的摩在同一个篮子里。

    如果你想让任何单词的任何部分匹配,那么你需要在 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。

    希望这会有所帮助。

    【讨论】:

    • 甜蜜,刚刚在 sphinx 文档中找到了它......但找不到它说把它放在 yml 中的位置。谢谢!
    • 有没有办法让他们不必在最后输入 *?就像搜索木头会拉起木头和木工,而无需输入木头*
    • 很好的答案。对于在这里绊倒的任何人,可以在freelancing-god.github.com/ts/en/advanced_config.html 找到详细信息。需要注意的一件事是,将 min_infix_len 设置为 1 可能会降低性能。
    猜你喜欢
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多