Sphinx中文分词Coreseek+Mmseg安装配置和示例

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/48897589

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 测试脚本
 * @authorliuyazhuang
 */
$sp = new SphinxClient();	// 实例化sphinx,这里使用的是PHP的Sphinx扩展
$sp->setServer('192.168.1.100', 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.106.131:3306', 'root', 'root') 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方法就是将结果关键词高亮显示了,到此大功告成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰 河

可以吃鸡腿么?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值