Maison >développement back-end >tutoriel php >linux下编译安装Sphinx、中文分词coreseek及PHP的sphinx扩展
Linux环境为:CentOS5.5、Ubuntu12.04
1、软件下载
sphinx-2.1.3
coreseek-4.1
2、安装 sphinx
tar zxvf sphinx-2.1.3.tar.gz //解压sphinx包 cd sphinx-2.1.3 ./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql/
--prefix:指定 sphinx 的安装路径
--with-mysql:指定 mysql 安装路径
sudo make && make install
编译并安装
安装成功之后,sphinx 会形成三个命令:
indexer 创建索引命令 searchd 启动进程命令 search 命令行搜索命令
注:上述命令默认在/usr/local/sphinx/bin目录下
3、配置 sphinx及使用
cd /usr/local/sphinx/etc
进入 sphinx 的 etc 目录下
sudo cp sphinx.conf.dist sphinx.conf
拷贝一份配置文件,并且命名为 sphinx.conf。
将该目录下的example.sql文件导入本地数据库名为test的数据库中。
修改配置信息,将其中数据库连接信息修改为你的本地数据库信息。
然后使用如下命令导入数据并生成索引:
$ cd /usr/local/sphinx/etc $ sudo /usr/local/sphinx/bin/indexer --all
如果执行indexer命令报错:
ERROR: index 'test1stemmed': sql_connect: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
则可能是因为mysql.sock的位置问题,在本机中,改位置是/tmp/mysql.sock(与安装mysql时设置有关),在sphinx.conf中取消这一行的注释即可(去掉前面的#号):
#sql_sock = /tmp/mysql.sock
再次执行上述indexer命令,一切正常。
执行查询的话可以使用如下指令:
$ cd /usr/local/sphinx/etc $ sudo /usr/local/sphinx/bin/search test
在执行search搜索过程中可能报错:
index 'test1': search error: query too complex, not enough stack (thread_stack=-2665032K or higher required).
我试着在sphinx.conf中的searchd模块中修改thread_stack的值,但没有解决问题,后来注释掉source src1中的如下这行
#sql_query_info = SELECT * FROM documents WHERE id=$id
再执行search命令,就OK了。
后台启动sphinx使用如下指令:
$ cd /usr/local/sphinx/etc $ sudo /usr/local/sphinx/bin/searchd
使用php脚本执行搜素命令,可使用如下指令:
$ cd sphinx/api $ php test.php test
输入结果如下:
Query 'test ' retrieved 3 of 3 matches in 0.022 sec. Query stats: 'test' found 10 times in 6 documents Matches: 1. doc_id=1, weight=101, group_id=1, date_added=2014-01-20 10:07:37 2. doc_id=2, weight=101, group_id=1, date_added=2014-01-20 10:07:37 3. doc_id=4, weight=1, group_id=2, date_added=2014-01-20 10:07:37
4、安装 coreseek
tar zxvf coreseek-4.1.tar.gz
解压会出现两个目录:csft-4.1、mmseg-3.2.14
先安装 mmseg
cd mmseg-3.2.14/ ./configure --prefix=/usr/local/mmseg
编译如果出现错误:“config.status: error: cannot find input file: src/Makefile.in”
解决方案:
sudo apt-get install automake aclocal libtoolize --force 我运行后有一个错误,没管它。 automake --add-missing autoconf autoheader make clean ./configure --prefix=/usr/local/mmseg make sudo make install
安装 csft(coreseek)
cd csft-4.1/ sh buildconf.sh ./configure --prefix=/usr/local/coreseek --with-mysql=/usr/local/mysql/ --with-mmseg=/usr/local/mmseg/ --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/ sudo make && make install
安装完成之后和sphinx安装后一样,需要导入coreseek/etc/example.sql文件到本地数据库,然后拷贝sphinx.conf.dist到csft.conf,修改其中数据库用户名及密码,测试出错和sphinx中出错解决办法一样。
使用 sphinx 需要做以下几件事
1.有数据;
2.建立 sphinx 配置文件;
3.生成索引;
4.启动 searchd 服务进程,默认是9312
5.用 PHP 去连接 sphinx 服务
启动 sphinx
cd /usr/local/coreseek/bin/ ./searchd
启动命令
searchd 命令参数介绍:
-c 指定配置文件
--stop 停止服务
--pidfile 用来显式指定一个 PID 文件
-p 指定端口
5、php 安装 sphinx 扩展
sudo pecl install sphinx
如果出现错误:“configure: error: Cannot find libsphinxclient headers”
解决方法:
cd coreseek-4.1/csft-4.1/api/libsphinxclient/ ./configure --prefix=/usr/local/libsphinxclient sudo make && make install
解决完毕!
回去接着执行
./configure --with-php-config=/usr/local/php/bin/php-config --with-sphinx=/usr/local/libsphinxclient sudo make && make install
出现类似“Installing shared extensions: /usr/lib/php5/20090626/sphinx.so”,表示成功。
可以进入该目录下会发现生成了一个 sphinx.so 文件
在 php.ini 中加载该 so 文件
extension=/usr/lib/php5/20090626/sphinx.so
重启 apache ,phpinfo() 中出现这个表明成功。