Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎。意图为其余应用提供高速、低空间占用、高结果 相关度的全文搜索功能。Sphinx能够很是容易的与SQL数据库和脚本语言集成。当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式 的XML数据。php
Sphinx的特性以下:java
a) 高速的创建索引(在当代CPU上,峰值性能可达到10 MB/秒);mysql
b) 高性能的搜索(在2 – 4GB 的文本数据上,平均每次检索响应时间小于0.1秒);linux
c) 可处理海量数据(目前已知能够处理超过100 GB的文本数据, 在单一CPU的系统上可 处理100 M 文档);程序员
d) 提供了优秀的相关度算法,基于短语类似度和统计(BM25)的复合Ranking方法;算法
e) 支持分布式搜索;sql
f) 支持短语搜索数据库
g) 提供文档摘要生成bootstrap
h) 可做为MySQL的存储引擎提供搜索服务;api
i) 支持布尔、短语、词语类似度等多种检索模式;
j) 文档支持多个全文检索字段(最大不超过32个);
k) 文档支持多个额外的属性信息(例如:分组信息,时间戳等);
l) 支持断词;
虽然mysql的MYISAM提供全文索引,可是性能却不敢让人恭维,另外数据库毕竟不是很善于作这样的事情,咱们须要把这些活让给更适合的程序去作,减小数据库的压力。所以采用Sphinx来作mysql的全文索引工具是一个很好的选择。这个星期主要来学习这个这个工具的使用,下面将学习过程大体的记录一下,作个备忘,也但愿能对学习这个工具的其余朋友有所启发。
Sphinx在mysql上的应用有两种方式:
这里的安装主要介绍的是第一种经过api调用的方式。Sphinx的安装以下:
#下载最新稳定版
wget http://www.sphinxsearch.com/downloads/sphinx-0.9.9.tar.gz
tar xzvf sphinx-0.9.9.tar.gz
cd sphinx-0.9.9
./configure --prefix=/usr/local/sphinx/ --with-mysql --enable-id64
make
make install
注意:采用这种方式安装不支持中文分词。
中文的全文检索和英文等latin系列不同,后者是根据空格等特殊字符来断词,而中文是根据语义来分词。中文分词主要有2个插件
Coreseek是如今用的最多的sphinx中文全文检索,它提供了为Sphinx设计的中文分词包LibMMSeg ,是基于sphinx的基础上开发的。
sfc(sphinx-for-chinese)是由网友happy兄提供的另一个中文分词插件。其中文词典采用的是xdict。
本文主要介绍Coreseek的安装方法
由于coreseek须要autoconf 2.64以上版本,所以须要升级autoconf,否则会报错从http://download.chinaunix.net/download.php?id=29328&ResourceID=648下载autoconf-2.64.tar.bz2,安装方法以下:
tar -jxvf autoconf-2.64.tar.bz2
cd autoconf-2.64
./configure
make
make install
新版本的coreseek将词典和sphinx源程序放在了一个包中,所以只须要下载coreseek包就能够了。
tar xzvf coreseek-3.2.14.tar.gz
cd mmseg-3.2.14
./bootstrap #输出的warning信息能够忽略,若是出现error则须要解决
./configure --prefix=/usr/local/mmseg3
make && make install
cd ..
cd csft-3.2.14
sh buildconf.sh #输出的warning信息能够忽略,若是出现error则须要解决
./configure --prefix=/usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql
make && make install
cd ..
备注:须要预先设置好字符集为zh_CN.UTF-8,确保正确显示中文,个人系统字符集为en_US.UTF-8也是能够的。
cd testpack
cat var/test/test.xml #此时应该正确显示中文
/usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml
/usr/local/coreseek/bin/indexer -c etc/csft.conf --all
/usr/local/coreseek/bin/search -c etc/csft.conf 网络搜索
此时正确的应该返回
words:
1. '网络': 1 documents, 1 hits
2. '搜索': 2 documents, 5 hits
新版本的已经自动生成。
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/