Coreseek+Mmseg 实现中文分词的安装配置的记录笔记。

安装前首先安装依赖的软件包

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

下载并编译安装 mmseg:

wget http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.1-beta.tar.gz
tar -zxvf coreseek-4.1-beta
cd mmseg-3.2.14
./bootstrap
./configure --prefix=/usr/local/mmseg3

make && make install

编译 mmseg 提示cannot find input file: src/Makefile.inaclocal 错误的解决办法

执行:

libtoolize --force
automake --add-missing
autoconf
autoheader
make clean
./configure --prefix=/usr/local/mmseg3

make && make install

编译安装 Coreseek,其实就是 Sphinx 的中文修改版

cd csft-3.2.14/
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=/usr/local/mysql/

make && make install

若仍提示libiconv 无法找到,需要修改 vi src/Makefile 文件,找 LIBS = 开头的行,

将
LIBS = -lm -lz -lexpat  -L/usr/local/lib –lpthread
修改成
LIBS = -lm -lz -lexpat -liconv -L/usr/local/lib -lpthread

到这里我们的 Coreseek + Mmseg 的安装就结束了,下面就来玩一下中文分词了,在 Coreseek 的包中提供了一个测试用的数据库 example.sql,就用这个数据库测试,将该数据库导入。

简单配置一下,在 /usr/local/coreseek/etc 下面新建 sphinx.cof 的配置文件,内容如下:

source src1
{
	type					= mysql

	sql_host				= localhost
	sql_user				= root
	sql_pass				= yuansir
	sql_db					= test
	sql_port				= 3306	# optional, default is 3306

	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

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


index test1
{
	source					= src1
	path					= /usr/local/coreseek/var/data/test1
	docinfo					= extern
	charset_type			= zh_cn.utf-8
	charset_dictpath		= /usr/local/mmseg3/etc/
	ngram_len               = 0
}


indexer
{
	mem_limit				= 32M
}


searchd
{
	port					= 9312
	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			= 0
	unlink_old				= 1
}

修改/usr/local/mmseg3/etc 下面的 mmseg.ini 如下:

[mmseg]
merge_number_and_ascii=0;   ;合并英文和数字 abc123/x
number_and_ascii_joint=-;   ;定义可以连接英文和数字的字符
compress_space=1;       ;暂不支持
seperate_number_ascii=0;    ;就是将字母和数字打散

至此一个简单的配置就完成了,具体配置项说明请去Coreseek的官方文档查看,很全面,这里只配置了一个数据源和一个索引。 我使用的 PHP 的 API 来操作 Sphinx,所以如果你 PHP 没有主持 Sphinx 扩展的话,先要安装 PHP 的 Sphinx 扩展,当然也可以直接引入 Sphinx 包中的 PHP 的 API 文件就可以了, 如何安装 PHP 扩展以前博客里面写过,就不重复了。然后就来启动 sphinx 服务和建立索引。

/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/sphinx.conf
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf --rotate  --all

searchdindexer的具体参数请参考官方文档。

新建一个 PHP 测试脚本:

/**
 * sphinx 测试脚本
 * @author yuanxuxu.com  <yuansir@live.cn>
 */
$sp = new SphinxClient();	// 实例化sphinx,这里使用的是PHP的Sphinx扩展
$sp->setServer('192.168.86.131', 9312) or die("can't connect to sphinx");	//选择服务器
$sp->setConnectTimeout(1);	//连接超时设置
$sp->setMatchMode(SPH_MATCH_ANY);	//设置全文查询的匹配模式
$sp->setArrayResult(TRUE);	//控制搜索结果集的返回格式
$res = $sp->query('国防部再次否认日方广州', 'test1'); //执行搜索查询,‘国防部再次否认日方广州’为关键词,test1索引名称 (可以为多个,使用逗号分割,或者为“*”表示全部索引).

$conn = mysql_connect('192.168.86.131', 'root', 'yuanxuxu') or die("can't connect to the mysql");
mysql_select_db('test', $conn);
mysql_query("SET NAMES utf8");

if (isset($res['matches'])) {
		//获取匹配的id,并组成(1,2)这样的sql where查询条件格式
        foreach ($res['matches'] as $item) {
                $id[] = $item['id'];
        }
        $ids = join(',', $id);
		$query = mysql_query("SELECT title,content From documents WHERE id IN({$ids})");

		while ($row = mysql_fetch_array($query)) {
				$options = array("before_match" =>" <font color='red'>", "after_match" =>"</font>","chunk_separator"=>'',"limit"=>300);
				$result = $sp->buildExcerpts($row, 'test1', '国防部再次否认日方广州', $options); //生成摘要
				echo $result[1] . "<br/><br/>" . $result[2] . "<br/><br/><br/>";
		}
}

具体 sphinx 的 api 实现可以去 php 官方手册上查询。这里 buildExcerpts 方法就是将结果关键词高亮显示了,到此大功告成,看下显示结果吧!

未命

转载请注明: 转载自Ryan 是菜鸟 | LNMP 技术栈笔记

如果觉得本篇文章对您十分有益,何不 打赏一下

谢谢打赏

本文链接地址: Sphinx 中文分词 Coreseek+Mmseg 安装配置和示例

知识共享许可协议 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可