【问题标题】:Thinking Sphinx - Wildcard search only on specific indexesThinking Sphinx - 仅针对特定索引的通配符搜索
【发布时间】:2011-12-06 16:29:21
【问题描述】:

我在我的 Rails 3.1 环境中运行thinking-sphinx 2.0.10,索引和搜索工作得很好。 当我在我的用户模型上搜索时,我想对用户名进行通配符搜索 但不在电子邮件上,因此只有在给定的搜索字符串与用户的电子邮件完全匹配时才应返回用户。 我做了一些研究,发现这可以通过在 define_index 块中启用通配符搜索来完成

set_property :enable_star => true
set_property :min_infix_len => 1

并将:infixes => true 添加到应该支持通配符搜索的索引中

define_index do

  indexes "CONCAT(first_name, ' ', last_name)", :as => :user_name,  :infixes => true
  indexes email

    has :id, :as => :user_id
    
    set_property :enable_star => true
    set_property :min_infix_len => 1
end

这是来自自动生成的 development.sphinx.conf

index user_core
{
  source = user_core_0
  path = /../../../../db/sphinx/development/user_core
  charset_type = utf-8
  min_infix_len = 1
  infix_fields = user_name
  enable_star = 1
}

infix_fields 我猜是正确声明的。

问题是,如果我搜索“.com”,我仍然会得到所有具有 .com 电子邮件地址的用户。 这可能是什么原因?

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    Sphinx 索引输入中的单词。通常只有整个单词,但可以启用带有中缀/前缀的部分单词。

    无论如何,charset_table 中未定义的任何内容(您没有,因此采用默认值)是一个分隔符。

    所以“。”是分隔符。因此,您的电子邮件将被索引为单词。 “com”本身就是一个词。

    所以搜索“.com”只是搜索“com”——即仍然是全字匹配。

    您可以添加“。”到你的字符集表来解决这个问题。 (但要注意它是否用作数据中的分隔符。如果只是索引名称和电子邮件,可能不是问题)。可能还想添加@,这样整个电子邮件就可以被索引为一个“单词”。


    我不知道如何将它放在你的 ruby​​ 配置中,我只知道它需要在 sphinx conf 文件中结束。

    【讨论】:

    • 非常感谢!我能够定义一个默认字符集,其中包括 @ 和 .在 config/sphinx.yml 中,现在一切正常:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多