一、Sphinx简介
Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎。意图为其他应用提供高速、低空间占用、高结果相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式的XML数据。
Sphinx的特性如下:
a) 高速的建立索引(在当代CPU上,峰值性能可达到10 MB/秒);
b) 高性能的搜索(在2 – 4GB 的文本数据上,平均每次检索响应时间小于0.1秒);
c) 可处理海量数据(目前已知可以处理超过100 GB的文本数据, 在单一CPU的系统上可处理100 M 文档);
d) 提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法;
e) 支持分布式搜索;
f) 支持短语搜索;
g) 提供文档摘要生成;
h) 可作为MySQL的存储引擎提供搜索服务;
i) 支持布尔、短语、词语相似度等多种检索模式;
j) 文档支持多个全文检索字段(最大不超过32个);
k) 文档支持多个额外的属性信息(例如:分组信息,时间戳等);
l) 支持断词;
虽然mysql的MYISAM提供全文索引,但是性能却不敢让人恭维,另外数据库毕竟不是很善于做这样的事情,我们需要把这些活让给更适合的程序去做,减少数据库的压力。因此采用Sphinx来做mysql的全文索引工具是一个很好的选择。这个星期主要来学习这个这个工具的使用,下面将学习过程大致的记录一下,做个备忘,也希望能对学习这个工具的其他朋友有所启发。
二、Sphinx安装
Sphinx在mysql上的应用有两种方式:
1.采用API调用,如使用PHP、java等的API函数或方法查询。优点是可不必对mysql重新编译,服务端进程“低耦合”,且程序可灵活、方便的调用;缺点是如已有搜索程序的条件下,需修改部分程序。推荐程序员使用。
2.使用插件方式(sphinxSE)把sphinx编译成一个mysql插件并使用特定的sql语句进行检索。其特点是,在sql端方便组合,且能直接返回数据给客户端。不必二次查询,在程序上仅需要修改对应的sql,但这对使用框架开发的程序很不方便,比如使用了ORM。另外还需要对mysql进行重新编译,且需要mysql-5.1以上版本支持插件存储。
这里的安装主要介绍的是第一种通过api调用的方式。Sphinx的安装如下:
1 | #下载最新稳定版 |
注意:采用这种方式安装不支持中文分词。
三、Sphinx中文分词
中文的全文检索和英文等latin系列不一样,后者是根据空格等特殊字符来断词,而中文是根据语义来分词。中文分词主要有2个插件
1.Coreseek
Coreseek是现在用的最多的sphinx中文全文检索,它提供了为Sphinx设计的中文分词包LibMMSeg ,是基于sphinx的基础上开发的。
2.sfc(Sphinx-for-chinese)
sfc(sphinx-for-chinese)是由网友happy兄提供的另外一个中文分词插件。其中文词典采用的是xdict。
本文主要介绍Coreseek的安装方法
四、Coreseek(支持中文检索的sphinx)安装
1.安装升级autoconf
因为coreseek需要autoconf2.64以上版本,因此需要升级autoconf,不然会报错从http://download.chinaunix.net/download.php?id=29328&ResourceID=648 下载autoconf-2.64.tar.bz2,安装方法如下:
1 | tar -jxvf autoconf-2.64.tar.bz2 |
2.下载coreseek
新版本的coreseek将词典和sphinx源程序放在了一个包中,因此只需要下载coreseek包就可以了。wget http://www.wapm.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz
3.安装mmseg(coreseek所使用的词典)
1 | tar xzvf coreseek-3.2.14.tar.gz |
解决configure: error: C++ compiler cannot create executables问题
yum install gcc gcc-c++ gcc-g77
安装Coreseek编译mmseg提示cannot find input file: src/Makefile.in
错误
解决办法,依次运行下面命令:
1 | aclocal ##aclocal:command not found 错误解决方法:yum -y install libtool |
安装完成后,mmseg使用的词典和配置文件,自动安装在/usr/local/mmseg3/etc
中
4.安装coreseek(sphinx)
1 | cd csft-3.2.14 |
ERROR: cannot find MySQL include files. 错误
yum install mysql-devel
5.测试mmseg分词和coreseek搜索
备注:需要预先设置好字符集为zh_CN.UTF-8,确保正确显示中文,我的系统字符集为en_US.UTF-8也是可以的。
1 | cd testpack |
此时正确的应该返回
words:
- ‘网络’: 1 documents, 1 hits
- ‘搜索’: 2 documents, 5 hits
ERROR: index ‘xml’: failed to configure some of the sources, will not index.错误
yum install expat-devel
然后再重新编译coreseek,但执行make前记得先make clean下清除掉原先没有该依赖时编译生成的内容。
6.生成 mmseg词库及配置文件
新版本的已经自动生成。
五、参考文章:
Sphinx中文指南
http://www.sphinxsearch.org/sphinx-tutorial
Sphinx中文分词应用
http://www.sphinxsearch.org/archives/82
Sphinx 0.9.8参考手册
CoreSeek BSD/Linux下的安装
http://www.coreseek.cn/products/products-install/install_on_bsd_linux/
http://blog.chinaunix.net/uid-20639775-id-3261834.html