使用sphinx索引和搜索带有(++,#,.)等字符的单词

时间:2011-05-11 06:09:29

标签: sphinx

您好我已经构建了索引,我需要搜索“c ++”,“。net”或“c#”等字词,但是 没有结果。这是我的配置:

source = xxxx
path = /usr/local/etc/sphinx/var/data/xxxx
docinfo = extern
charset_type = utf-8
min_word_len = 1
min_infix_len = 7
stopwords = /usr/local/etc/sphinx/var/stopwords/stop_words_en.txt

我尝试使用SPH_MATCH_PHRASE和SPH_MATCH_ALL进行搜索,但没有什么用处。

我该怎么做才能允许这个?

由于 NIK

2 个答案:

答案 0 :(得分:1)

您必须配置 charset_table 以包含符号 +,#,。,

index YOUR_INDEX
{
charset_table = 0..9, A..Z->a..z, a..z, +, #, U+002E,

您可以通过CALL KEYWORDS MySQL调用

来检查单词是如何标记的

使用你提供的配置我会得到这样的输出

的MySQL> CALL KEYWORDS('c ++ .net c#end_of_a_sentence。','YOUR_INDEX')

标记化规范化 c c 净净额 c c 结束 的 一个 句子

我添加到你的配置输出是 标记化的标准化 c ++ c ++ .net .net c#c# 结束 的 一个 句子。句。

charset_table 点(。)的缺点,句子末尾的单词被标记化并与 <一起编入索引/ p>

'例句。'

'句子'字会被标记为'句子。'并且搜索'句子'什么都不给你。< / p>

答案 1 :(得分:0)

正如tmg_tt所述,修改charset_table应该有效。

但是,您需要在#的索引定义中转义+,可能还要转义sphinx.conf

charset_table=0..9, A..Z->a..z, _, a..z,\#, U+A8->U+B8, U+B8, U+C0..U+DF->U+E0..U+FF, U+E0..U+FF

适用于英镑,但至少在+中,我还没有想出如何逃避Sphinx 0.99

我也在sphinx论坛上发帖了。