Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎。意图为其他应用提供高速、低空间占用、高结果相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。当前系统内置MySQL和PostgreSQL数据库数据源的支持,也支持从标准输入读取特定格式的XML数据。
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在mysql上的应用有两种方式:
这里的安装主要介绍的是第一种通过api调用的方式。Sphinx的安装如下:
#下载最新稳定版
wget https://github.com/sphinx-doc/sphinx/archive/refs/tags/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的安装方法
因为coreseek需要autoconf 2.64以上版本,因此需要升级autoconf,不然会报错从下载autoconf-2.64.tar.bz2,安装方法如下:
wget https://ftp.gnu.org/gnu/autoconf/autoconf-2.64.tar.gz
tar -jxvf autoconf-2.64.tar.bz2
cd autoconf-2.64
./configure
make
make install
wget
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中文指南
Sphinx中文分词应用
Sphinx 0.9.8参考手册
CoreSeekBSD/Linux下的安装