KM 原来是使用solr做全文搜索,但搜索结果一直不太令人满意,最近决定转成使用sphinx
试用了sphinx的几个不同版本
- sphinx0.9.10, sphinx的最新版本, 可以对中文进行搜索,但默认安装没有对中文分词,需要打patch, 没找到这个版本的patch, 放弃
- coreseek 3.1 rc1, coreseek是基于sphinx, 并对中文分词做了加强, 这个版本安装完之后,使用SPH_MATCH_ALL 模式进行查询的时候,没有返回任何结果,也没有出错信息,本着拿来即用的原则,放弃
- 最后安装的是coreseek 3.1 beta3, 以下是简要的安装步骤:
1. 下载mmseg3.1 http://www.coreseek.cn/uploads/csft/3.1/Source/mmseg-3.1.tar.gz
mmseg 是sphinx 的中文分词软件包,编译,安装
./configure --prefix=/usr/local/mmseg
make
make install
2. 下载安装 coreseek 3.1b3 http://www.coreseek.cn/uploads/sources/csft3.1b3.tar.gz
./configure --prefix=/usr/local/sphinx --with-mysql --with-mmseg-includes=/usr/local/mmseg/include/mmseg --with-mmseg-libs=/usr/local/mmseg/lib/
make
make install
3. 创建字典
mkdir /usr/local/sphinx/dict/
cd INSTALL/mmseg-3.1/data
/usr/local/mmseg/bin/mmseg -u unigram.txt
cp unigram.txt.uni /usr/local/sphinx/dict/uni.lib
创建 /usr/local/sphinx/dict/mmseg.ini , 输入
[mmseg]
merge_number_and_ascii=1;
number_and_ascii_joint=-;
compress_space=0;
seperate_number_ascii=1;
#merge_number_and_ascii: 字母和数字连续出现是非切分
#number_and_ascii_joint:连接数字和字母可用的符号,如'-' '.' 等
#compress_space:暂时无效
#seperate_number_ascii:是否拆分数字,如 1988 -> 1/x 9/x 8/x 8/x
4. 创建 配置文件
首先从模版复制
cp /usr/local/sphinx/spinx.conf.dist /usr/local/sphinx/sphinx.conf
然后修改数据库连接和sql_query
在index下添加字典路径
index
{
...
charset_dictpath = /usr/local/sphinx/dict
...
}
5. 生成index
/usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf --all
6. 启动daemon
/usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf
启动之后如果更新索引要加rotate参数
/usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf --all --rotate
7. 然后就可以在php中进行连接搜索了
$cl = new SphinxClient ();
$cl->SetServer ( 'hostname', 3312 );
$index = "*";
$cl->SetMatchMode ( SPH_MATCH_ANY );
$cl->setSortMode(SPH_SORT_RELEVANCE);
$cl->setRankingMode(SPH_RANK_WORDCOUNT);
$cl->SetArrayResult ( true );
$res = $cl->Query ( $q, $index );
来源:https://www.cnblogs.com/kuncai/archive/2010/01/05/1639704.html