简介
Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件。
Sphinx单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。
sphinx特性
高速索引 (在新款CPU上,近10 MB/秒);
高速搜索 (2-4G的文本量中平均查询速度不到0.1秒);
高可用性 (单CPU上最大可支持100 GB的文本,100M文档);
提供良好的相关性排名
支持分布式搜索;
提供文档摘要生成;
提供从MySQL内部的插件式存储引擎上搜索
支持布尔,短语, 和近义词查询;
支持每个文档多个全文检索域(默认最大32个);
支持每个文档多属性;
支持断词;
支持单字节编码与UTF-8编码。
sphinx安装方法:
1 获取sphinx包
2 执行命令
使用时发现一个问题
./indexer: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory
该问题为找不到相应的动态共享库,当然如果mysql是默认安装不会出现这个问题,解决办法是
在 ~/.bash_profile 添加
export LD_LIBRARY_PATH=/home/wully/mysql/lib/mysql/:$LD_LIBRARY_PATH
复制 etc/sphinx.conf.dist 为 etc/sphinx.conf,调整etc/sphinx.conf对应的mysql配置。使用etc/example.sql导入到mysql中进行测试
相应的中文手册:
http://sphinxsearch.com/wiki/doku.php?id=sphinx_manual_chinese
http://www.wapm.cn/uploads/pdf/sphinx_doc_zhcn_0.9.pdf
中文搜索
但是源sphinx对于中文搜索的支持蛮弱的,如果不需要中文切词的话,粒度较粗的查询可以通过etc/sphinx.conf的索引中设置来实现对中文的搜索
如果需要应该中文切词,细化粒度。搜索一番,发现了两个应用mmseg算法的中文搜索的改进版本,
当然如果感觉还不爽,可以自己修改源文件的切词程序,编写一个CSphTokenizerTraits的子类,并在ISphTokenizer::Create 中调整 CSphTokenizerSettings 的 m_iType来实现:
mmseg:
简单的说,对MMSEG的解释分为“匹配算法(Matching algorithm)”和“消除歧义的规则(Ambiguity resolution rules)”这两部分。
“匹配算法”是说如何根据词典里保存的词语,对要切分的语句进行匹配(正向?逆向?粒度?)
“消除歧义的规则”是说当一句话可 以这样分,也可以那样分的时候,用什么规则来判定使用哪中分法,
比如“设施和服务”这个短语,可以分成“设施_和服_务”,也可以分成“设施_和_服 务”,选择哪个分词结果,就是“消除歧义的规则”的功能。
该分词的详细信息可以参见算法作者的文档:http://technology.chtsai.org/mmseg/
sphinx-for-chinese
http://code.google.com/p/sphinx-for-chinese/downloads/detail?name=sphinx-for-chinese-0.9.9-r2117.tar.gz&can=2&q=
该版本采用 MMSEG分词算法,分词效果比coreseek要差些
安装:
sphinx-for-chinese安装方法和sphinx一样,但需要额外生产词典。
词典路径为:http://sphinx-for-chinese.googlecode.com/files/xdict_1.1.tar.gz
需要创建词典 bin/mkdict xdict.txt xdict
修改配置文件:sphinx.conf,把charset_type改为utf-8,另外添加chinese_dictionary属性
charset_type = utf-8
chinese_dictionary = /home/wully/sphinx/etc/xdict
但mmseg算法在这里应用有一个小问题,比如有一个句子:XX有限公司。
由于有限公司的词频比公司要高,搜索公司时,不会搜索到含有有限公司的条目。
coreseek
http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.0.1-beta.tar.gz
这个应该是一个产品级的包,详细信息可以查看官网(http://www.coreseek.cn)
安装说明:
http://www.coreseek.cn/products-install/install_on_bsd_linux/
附录:
在mysql5.1.x中安装sphinx引擎
在MySQL源码目录中建立storage/sphinx目录,并将Sphinx源码目录中的mysqlse目录下的全部文件拷贝到这个目录。示例:
有相关的讨论可以call我: email:wully_happy#163.com