sphinx+mysql 在中文搜索中的尝试应用

 

简介

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值