Ubuntu12.04 编译安装Sphinx Coreseek3.2.14及PHP Sphinx 扩展库

时间:2022-03-16 08:32:56

1、软件下载

Sphinx 选source tarball。

coreseek

2、安装Sphinx

创建安装目录,并授权

$ sudo mkdir /usr/local/sphinx
$ sudo chmod -R 777 /usr/local/sphinx

安装依赖包

$ sudo apt-get install make gcc g++ automake libtool mysql-client libmysqlclient15-dev libxml2-dev libexpat1-dev

安装

$ tar zxvf sphinx-2.1.9-release.tar.gz
$ cd sphinx-2.1.9-release
$ sudo ./configure --prefix=/usr/local/sphinx //prefix 指定安装目录,如果要安装mysql 加上 --with-mysql
$ sudo make && make install

关于sphinx的三个命令,目录是/usr/local/sphinx/bin

indexer   //生成索引
search //搜索
searchd //启动sphinx

3、配置sphinx并使用

生成配置文件

$ cd /usr/local/sphinx/etc
$ sudo cp sphinx.conf.dist sphinx.conf

将etc目录下example.sql文件导入到mysql test数据库。 更改sphinx.conf,主要更改myql用户名和密码

生成索引

$ sudo /usr/local/sphinx/bin/indexer --all

如果爆出以下错误

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

然后重新创建索引。 执行查询

$ sudo /usr/local/sphinx/bin/search test

可能会爆出以下错误

index 'test1': search error: query too complex, not enough stack (thread_stack=-2665032K or higher required).

注释掉配置文件中下面这行,然后重试

#sql_query_info         = SELECT * FROM documents WHERE id=$id

后台启动searchd的命令

$ sudo /usr/local/sphinx/bin/searchd

然后运行php文件test.php

$ sudo php /usr/local/sphinx/api/test.php test

参考查询结果

Query 'test ' retrieved 3 of 3 matches in 0.000 sec.
Query stats:
'test' found 10 times in 6 documents

Matches:
1. doc_id=1, weight=101, group_id=1, date_added=2014-08-27 12:15:20
2. doc_id=2, weight=101, group_id=1, date_added=2014-08-27 12:15:20
3. doc_id=4, weight=1, group_id=2, date_added=2014-08-27 12:15:20

4、安转Coreseek

$ tar coreseek-3.2.14.tar.gz

会解压出:csft-3.2.14 mmseg-3.2.14 README.txt testpack 先来安装

$ cd mmseg3.2.14
$ ./configure --prefix=/usr/local/mmseg

注:需提前创建mmseg文件夹并授权777 可能会爆出如下错误

$ 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

然后重新安装

$ sudo ./configure --prefix=/usr/local/mmseg
$ sudo make && make install

安装coreseek

$ cd csft-3.2.14
$ sudo sh buildconf.sh
$ sudo ./configure --prefix=/usr/local/coreseek --with-mmseg=/usr/local/mmseg/ --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/
$ sudo make && make install

生成配置文件

$ cd /usr/local/coreseek/etc
$ sudo cp sphinx.conf.dist csft.conf

这里同样把example.sql导入数据库,然后修改csft.conf

5、安装php扩展sphinx

$ sudo pecl install sphinx

可能会爆出如下错误:

$ configure: error: Cannot find libsphinxclient headers

需要安装libsphinxclient

$ cd coreseek-3.2.14/csft-3.2.14/api/libsphinxclient/
$ ./configure --prefix=/usr/local/libsphinxclient
$ sudo make && make install

注:同样需要提前创建libsphinxclient文件夹并授权。

然后重新安装,注意安装过程中需要填写libsphinxclient安装目录。

安装完成后配置php,然后重启apache或nginx

$ echo "extension=sphinx.so" | sudo tee /etc/php5/conf.d/sphinx.ini
$ sudo service apache2 restart
$ sudo service nginx reload

6、使用sphinx需要的东西

1、要有数据,数据库或其他类型的都可以。

2、建立sphinx配置文件。

3、生成索引。

4、启动searchd进程,默认端口9312。

5、用脚本语言(python,php)去连接sphinx服务。

7、启动searchd

$ sudo /usr/local/sphinx/bin/searchd

searchd 命令参数介绍:

-c 指定配置文件

–stop 停止服务

–pidfile 用来显式指定一个 PID 文件

-p 指定端口


如果你的gcc版本在4.7以上,编译的时候可能会因为sphinx的一个bug报错

: error: ‘ExprEval’ was not declared in this scope, a

sphinxexpr.cpp:1746:43: error: ‘ExprEval’ was not declared in this scope, and no declarations were found by argument-wget -O - http://blog.atime.me/static/resource/sphinxexpr-gcc4.7.patch.gz | gzip -d - | patch -p0