欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

linux下编译安装Sphinx、中文分词coreseek及PHP的sphinx扩展

程序员文章站 2022-05-03 11:01:55
...
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() 中出现这个表明成功。