php+sphinx+mysql打造千万级数据全文搜索 (苹果OS X 10系列安装)

时间:2021-01-28 08:27:42
Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎。意图为其他应用提供高速、低空间占用、高结果 相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式 的XML数据。
Sphinx创建索引的速度为:创建100万条记录的索引只需3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。
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提供全文索引,但是性能却不敢让人恭维


开始搭建

系统环境:mac os x系统+php5.6+apache+MySQL

1、安装Sphinx

wget http://sphinxsearch.com/files/sphinx-2.2.11-release.tar.gz
tar zxvf sphinx-2.2.11-release.tar.gz
cd sphinx-2.0.7-release
./configure --prefix=/usr/local/sphinx --with-mysql --with-libexpat --enable-id64
sudo make
sudo make install

2、安装libsphinxclient,PHP扩展用到

cd api/libsphinxclient  
#注意这里的.configure必须加CXXCPP="gcc -E",不然会报错
#configure: error: C++ preprocessor "/lib/cpp" fails sanity check
#我在百度折腾大半天没找到答案,然后去国外论坛找到的,这我不能不再次说百度是个废物
CXXCPP="gcc -E" ./configure --prefix=/usr/local/sphinx/libsphinxclient
sudo make
sudo make install

3安装Sphinx的PHP扩展:我的是5.6需装sphinx-1.3.3.tgz,如果是php5.4以下可sphinx-1.3.0.tgz

wget -c http://pecl.php.net/get/sphinx-1.3.3.tgz  
tar zxvf sphinx-1.3.3.tgz
cd sphinx-1.3.3
sudo phpize
./configure --with-sphinx=/usr/local/sphinx/libsphinxclient/ --with-php-config=/usr/bin/php-config
sudo make
sudo make install
#向配置文件添加扩展so
sudo echo "[Sphinx]" >> /etc/php.ini
sudo echo "extension = sphinx.so" >> /etc/php.ini
#重启apache
sudo apachectl restart


在make install生成php扩展的时候,由于os sip机制阻止了向/usr/lib/php/extension目录拷贝so文件,我们按照以下方法就可以解决问题

  • 重启系统
  • 按住Command + R   (重新亮屏之后就开始按,象征地按几秒再松开,出现苹果标志,ok)
  • 菜单“实用工具” ==>> “终端” ==>> 输入csrutil disable;执行后会输出:Successfully disabled System Integrity Protection. Please restart the machine for the changes to take effect.
  • 再次重启系统

禁止掉SIP后,就可以顺利的安装了,当然装完了以后你可以重新打开SIP,方法同上,只是命令是csrutil enable

关于sphinx的应用请看http://blog.csdn.net/nuli888/article/details/51892776的文章。