coreseek在Centos(Linux)下的安装和使用(即加上中文分词机制的Sphinx)

2018-01-03 17:46:00
linefo
原创
825


前言


coreseek是加上中文分词机制的Sphinx!

coreseek好像很久没更新了,coreseek3.2.14 基于的Sphinx还是0.99的!


测试环境


操作系统:CentOS 7

PHP版本:5.6

MySQL版本:5.7


搭建安装环境和下载资源


yum搭建安装环境


yum install make gcc gcc++gcc-c++libtool autoconf automake imake mysql-devel libxml2-devel expat-devel


下载coreseek并传到/usr/local/src目录下

(coreseek的官网已经关闭,我是从网上自己下载然后用Xftp软件传到目录下的


解压(如果没有tar命令自行安装)


我的Centos下安装了图形界面,可以看到解压后的coreseek文件夹有三个目录

csft:coreseek源代码,即经过修改的Sphinx

mmseg:中文词库相关

testpack:测试相关的东西,包括测试脚本、配置文件,以及作为日志保存的地方。


安装mmseg


(安装中如果有警告可以忽略,有错误必须要处理,出现错误,可以先确认安装环境是否搭建好。)

进入解压后的mmseg目录下,

执行下面一系列命令:


./bootstrap        # 输出的warning信息可以忽略,如果出现error则需要解决,一般不会出现错误

./configure --prefix=/usr/local/mmseg3   # 指定 mmseg 的安装目录

make && make install  # 编译安装


如果安装成功,在usr/local/mmseg3目录下你会看到有内容了:


安装csft



进入解压后的csft目录下,我们要先对src目录下的sphinxexpr.cpp文件进行改动:

(我是直接在图形桌面下操作的)


修改1013行附近的ExprEval为this->ExprEval



修改1047行附近的ExprEval为this->ExprEval


修改1080行附近的ExprEval为this->ExprEval


回到解压后的csft目录下,执行下面一系列命令:

(安装过程中可能有很多警告,如果不是错误就可以忽略,反正没学会C和Linux机制,怎么改?)



sh buildconf.sh

./configure --prefix=/usr/local/coreseek  --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql

make && make install



进行测试


首先进入解压后的testpack目录

先测试mmseg的分词功能


cat var/test/test.xml   #此时应该正确显示中文

结果(示例文档):



/usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml  #整篇文章进行分词

结果(mmseg的分词机制生效的情况):


接下来我们要测试csft的功能


(下面的命令出现“xmlpipe2 support NOT compiled”的错误,也就是不支持对XML数据源创建索引。网上说是expat-devel安装的问题,我安装了并重新编译安装coreseek,没有能够解决。留到以后处理。)


/usr/local/coreseek/bin/indexer -c /usr/local/src/coreseek-3.2.14/testpack/etc/csft.conf --all  #创建索引

结果:


/usr/local/coreseek/bin/search -c etc/csft.conf 网络搜索    #搜索关键字 网络搜索

结果:



/usr/local/coreseek/bin/searchd -c etc/csft.conf    #正常开启搜索服务

结果:



/usr/local/coreseek/bin/searchd -c etc/csft.conf --stop #如要停止搜索服务

结果:



/usr/local/coreseek/bin/indexer -c etc/csft.conf --all --rotate #如要已启动服务,要更新索引

结果:



在PHP中使用


安装PHP的Sphinx的扩展才能支持对coreseek的使用。


安装libsphinxclient

(有这个才能安装PHP的Sphinx扩展


进入csft中的api/libsphinxclient目录下(我这里路径是/usr/local/src/coreseek-3.2.14/csft-3.2.14/api/libsphinxclient

执行配置和安装命令:


./configure  # 配置

make && make install  # 编译安装


PHP的Sphinx的扩展安装

进入http://pecl.php.net/package/sphinx,找到适合版本的Sphinx扩展,我这里下的是


使用Xftp软件传到CentOS下,我传到的目录是usr/local/src

在该目录下解压:


tar -zxvf sphinx-1.3.3.tgz #解压


进入解压后的目录,执行下列命令:


phpize  # 暂不明意义

./configure  # 配置

make && make install  # 编译安装


接着打开php.ini(一般在/ect目录下),加上Sphinx的扩展信息,接着重启php-fpm服务(因为我用的是nginx)


使用phpinfo()函数看一下,果然已经OK了

往数据库导入测试数据

在csft的目录下,有个example.sql,导入数据后(里面的SQL语句是往名为'test'数据库插入数据),会得到两个带有数据的表


我们工作的实际使用目录是在另外的位置




我们在etc目录下建一个名为 csft.conf(指定的命名) 的文件,配置参考如下:

#
# Minimal Sphinx configuration sample (clean, simple, functional)
#

source src1
{
	type			= mysql #数据源,这里是mysql
	sql_host		= localhost # 数据库服务器
	sql_user		= root # 数据库用户
	sql_pass		= bbh4472332 # 数据库密码(这里空密码不能用'')
	sql_db			= test # 数据库
	sql_port		= 3306	# 端口
	sql_query_pre	= SET NAMES utf8 # 在执行sql_query之前执行的查询

	sql_query		= SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents

	sql_attr_uint		= group_id
	sql_attr_timestamp	= date_added
}


index test1
{
	source			= src1
	path			= /usr/local/coreseek/var/data  # 放索引文件的目录
	docinfo			= extern
	charset_type	= sbcs
}


indexer
{
	mem_limit		= 32M
}

# 搜索服务配置

searchd
{
	port          	= 9313 # 监听端口
	log			= /usr/local/coreseek/var/log/searchd.log # 监听日志
	query_log		= /usr/local/coreseek/var/log/query.log # 查询日志
	read_timeout	= 5
	max_children	= 30
	pid_file		= /usr/local/coreseek/var/log/searchd.pid
	max_matches		= 1000
	seamless_rotate	= 1
	preopen_indexes	= 1
	unlink_old		= 1
}


在var/log目录下建立配置文件指定的三个日志文件


调用indexer程序生成索引:


开启searchd进程

(默认的9312端口开不了,只能在配置文件里面设置成9313了)


运行PHP脚本


<?php
	$Sphinx = new SphinxClient(); // 使用Sphinx类
	$Sphinx->SetServer("localhost", 9313); // 服务器地址和端口(端口在Searchd的配置那里)
	$Sphinx->SetMatchMode(SPH_MATCH_ANY); // 设置为 “匹配查询词中的任意一个” 模式
	$Sphinx->SetArrayResult(true); // 设置搜索结果集以数组形式返回
	$result = $Sphinx->query("another", "*"); // 查询字符串和索引名称,*表示所有
	var_dump($result);exit;


【问题】

脚本没有运行成功,通过看进程发现searchd已经在运行了,并且使用命令search也能从索引中查找到数据。

错误提示是连接被拒绝,后期再解决

文章分类
联系我们
联系人: Mr.Chen
QQ: 185391277