1、一元分词和中文分词的结合: ①、一元分词位于索引更新模块。Sphinx索引引擎对于CJK(中日韩)语言(必须是UTF-8编码)支持一元切分,假设【反恐行动是国产主视角射击网络游戏】这段文字,Sphinx会将其切成【反
恐 行 动 是 国 产 主 视 角 射 击 网 络 游
戏】,然后对每个字建立反向索引。如果用这句话中包含的字组成一个不存在的词语,例如【恐动】,也会被搜索到,所以搜索时,需要加引号,例如搜索【”反恐行动”】,就能完全匹配连在一起的四个字,不连续的【”恐动”】就不会被搜索到。但是,这样还有一个问题,搜索【”反恐行动游戏”】或【”国产网络游戏”】就会搜索不到。对于这个问题,采用位于搜索查询模块的中文分词来处理。
sphinx.conf配置文件中关于UTF-8中文一元分词的配置如下:
…省略…
index
t_source_main
{
source
= t_source_main
path
=
/data0/search/sphinx/data/t_source_main
docinfo
= extern
mlock
= 0
morphology
= none
min_word_len =
1
charset_type =
utf-8
min_prefix_len =
0
html_strip
= 1
charset_table =
0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F,
U+430..U+44F
ngram_len
= 1
ngram_chars
=
U+3000..U+2FA1F
}
…省略…
②、中文分词位于搜索查询模块。搜索“反恐行动游戏”、“国产网络游戏”,先调用独立的中文分词系统,分别切分为“反恐行动
游戏”、“国产 网络游戏”,这时候,再给以空格分隔的词语加上引号,去Sphinx搜索【”反恐行动” “游戏”】或【”国产”
“网络游戏”】,就能搜索到这条记录了。中文分词词库发生增、删、改,无需重建整个Sphinx搜索索引。
henry解释:也就是说,做索引的时候,不用词库去分词,而是沿用sphinx原来的一元分词法。在搜索的时候才用分词去做词组的完全匹配搜索。另外一个原因,用原版的一元分词索引速度也要快很多,在他的博文中提到:
“我的环境是10000转的SAS硬盘,如果换成15000转的硬盘,速度要更快,Sphinx官方给出的索建引速度为10Mbytes/秒。原版的
sphinx一元分词创建索引速度在5.5M/秒以上,而打了LibMMSeg中文分词补丁的Sphinx创建索引速度只有300KB/秒,所以采用原版的sphinx
0.9.9能够保证频繁更新情况下的索引实时性。一元分词的索引的数据量会大一些,但可以通过sphinx分布式索引来解决搜索效率问题。”
原文:http://www.cnblogs.com/zl0372/p/sphinx_14.html