我在我的Rails项目中使用Sphynx和ThinkingSphynx。有什么方法可以让Sphynx停止忽略空间,以便" Foo"钥匙会找到我" Foo Bar"并且不会找到我,例如" foo@bar.com" ?
答案 0 :(得分:0)
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
请注意,这两个设置都会影响索引数据中无处不在的字符,而不仅仅是电子邮件地址中的字符<(不,您不能在每个字段的基础上设置它们)
答案 1 :(得分:0)
我已经为indice添加了blend_chars选项,并且所有内容都根据需要开始工作:
set_property :blend_chars => 'U+20, @, .'
U + 20实际上是一个空间。