【发布时间】:2017-07-01 13:34:05
【问题描述】:
我在我的 Rails 项目中使用了 Sphynx 和 ThinkingSphynx。有什么方法可以让 Sphynx 停止忽略空格,以便“Foo”键会找到我“Foo Bar”而不会找到我,例如“foo@bar.com”?
【问题讨论】:
标签: ruby-on-rails sphinx thinking-sphinx
我在我的 Rails 项目中使用了 Sphynx 和 ThinkingSphynx。有什么方法可以让 Sphynx 停止忽略空格,以便“Foo”键会找到我“Foo Bar”而不会找到我,例如“foo@bar.com”?
【问题讨论】:
标签: ruby-on-rails sphinx thinking-sphinx
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 选项添加到 indice 并且一切都开始按需要工作:
set_property :blend_chars => 'U+20, @, .'
U+20 实际上是一个空格。
【讨论】: