如何让 Sphinx 停止忽略空格?

How do I make Sphinx stop ignoring spaces?

我在 Rails 项目中使用 Sphynx 和 ThinkingSphynx。有什么办法可以让 Sphynx 停止忽略空格,以便 "Foo " 键可以找到我 "Foo Bar" 而不会找到我,例如 "foo@bar.com" ?

Sphinx 实际上将 @ 视为非索引字符,与 . 相同,因此它们成为单词分隔符。因此,"foo@bar.com" 实际上被索引为 "foo bar com".

如果您希望 "foo@bar.com" 保持原样,则应将 @. 添加到 config/thinking_sphinx.yml 中的 charset_table 值对于每个环境。我这里的示例是默认集,加上最后这两个字符的 unicode 值(40 是 @,AD 是 .)。

development:
  charset_table: 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+401->U+451, U+451, U+0040, U+00AD

另一种方法是将这些字符添加到 ignore_chars 选项中。这样,它们在索引数据中被 删除 ,因此 "foo@bar.com" 变为 "foobarcom":

development:
  ignore_chars: U+0040, U+00AD

请记住,这两个设置都会影响索引数据中所有地方的字符,而不仅仅是电子邮件地址(不,您不能将它们设置在按字段计算)。

我已将 blend_chars 选项添加到索引中,一切都按需要开始工作:

set_property :blend_chars => 'U+20, @, .'

U+20其实就是一个space.