编程学习网 > 服务器 > Ubuntu > Linux下编译安装Sphinx、中文分词coreseek及PHP的sphinx扩展
2014
11-07

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() 中出现这个表明成功。

sphinx

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取