更新于 2013-09-11 00:54:46 UEANER

系统环境

  • CentOS 6.4 x86_64

安装依赖

# yum install gcc make gcc-c++

下载

# wget http://sphinxsearch.com/files/sphinx-2.0.9-release.tar.gz

安装

# cd /usr/local/src/
# tar xf /path/to/sphinx-2.0.9-release.tar.gz
# cd sphinx-2.0.9-release/
# ./configure --prefix=/usr/local/sphinx --with-mysql --enable-id64
# make
# make -j4 install

前提已安装 mysql 环境,及 mysql-devel 包。

测试

导入数据

# mysql -u test < /usr/local/sphinx/etc/example.sql

创建默认配置配置文件:sphinx.conf

# cd /usr/local/sphinx/
# cp etc/sphinx.conf.dist etc/sphinx.conf

创建索引

# ./bin/indexer --all

测试

# ./bin/search test

words:
1. 'test': 3 documents, 5 hits

'test': 3 documents, 5 hits 表示:有 3 条记录符合要求,命中 5 次(即出现 5 次).

配置一元分词

Sphinx 一元分词模式支持中文分词。

# vi etc/sphinx.conf

修改以下内容:

source src1
{
    ...
    sql_query_pre    = SET NAMES utf8 #打开此句注释
    ...
}

index test1
{
    ...
    charset_type     = utf-8 #修改 charset_type 为 utf-8
    ...
    ngram_len        = 1 #打开此句注释
    ngram_chars      = U+3000..U+2FA1F #打开此句注释
    ...
}

保存退出。

先插入一段中文:

insert into documents(title, content) values
('锄禾日当午', '锄禾日当午,上班真辛苦,一台破电脑,一坐一下午'),
('你有尺子吗', '昨天看电视说"吸烟导致猝死"吓的我心里哆嗦!一咬牙一跺脚下定决心!"以后不看电视了"');

重建索引

# ./bin/indexer --all

搜索中文

# ./bin/search "以后不看电脑了"

words:
1. '以': 1 documents, 1 hits
2. '后': 1 documents, 1 hits
3. '不': 1 documents, 1 hits
4. '看': 1 documents, 2 hits
5. '电': 2 documents, 3 hits
6. '脑': 1 documents, 1 hits
7. '了': 1 documents, 1 hits

每一个字都进行了分词,配置完毕。

乱码问题

如果出现乱码现象请检查你的 mysql 配置文件,编码是否为 utf8

my.cnf utf8 编码配置:

[mysqld]
character-set-server=utf8

[client]
default-character-set=utf8

Good Luck!

虽然一元分词保证了查全率,但是速度慢且破坏语义。可暂时使用 CoreSeek 通过 LibMMSeg 进行中文分词

参考

Sphinx源码包:doc/sphinx.txt
转载请注明出处。
本文地址:http://blog.aboutc.net/linux/54/linux-configure-sphinx-single-word-participle

评论:3

ueaner 2014-04-18 10:14:24
终端执行如果出现:index 'test1': search error: . 等类似错误,尝试注释掉:sql_query_info  = SELECT * FROM documents WHERE id=$id 再试
justin 2014-06-28 11:10:49
你懂不懂什么是中文分词呀?
ueaner 2014-06-28 16:35:54
@justin: 欢迎指正。
关闭高亮高亮 分享到新浪微博分享到新浪微博