更新于 2014-12-01 04:44:40 UEANER

系统环境

  • CentOS 6.4 x86_64

下载

$ wget http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.1-beta.tar.gz

coreseek-4.1-beta.tar.gz 包含了分词包 mmseg-3.2.14 和搜索包 csft-4.1

安装 mmseg

参考:Linux/Mac 下安装 LibMMSeg 中文分词包

安装 csft

$ cd ../csft-4.1/
$ ./buildconf.sh    ##输出的warning信息可以忽略,如果出现error则需要解决
$ ./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
$ sudo make install

coreseek 编译时会自动加入 mysql 支持,除非你手动添加 --without-mysql 参数,可以通过 ./configure --help 看到。 而加入 mysql 支持, coreseek 需要知道 mysql.h 和 libmysqlclient.so(Mac 下为 libmysqlclient.dylib) 的位置。

coreseek 获取 mysql.h 和 libmysqlclient.so 的位置的两种方式

首先需要明确:当 sphinx 知道 mysql_config 的位置时,会从 mysql_config 中获取 includes 和 libs 的路径, 否则需要手工指定 includes 和 libs 的路径。

  • 1、通过参数 --with-mysql:当 mysql_config 在环境变量中时,可以直接使用 --with-mysql 参数,而无需指定任何路径信息, sphinx 会自动从 mysql_config 命令的结果中提取 includes 和 libs 的路径, 当 mysql_config 不在环境变量中时,使用 --with-mysql=/path/to/mysql 指定 mysql_config 的路径, sphinx 会自动在指定路径下的 bin 目录下寻找 mysql_config 文件,所以目录结构应为: /path/to/mysql/bin/mysql_config。
  • 2、通过参数 --with-mysql-includes 和 --with-mysql-libs 直接指定 includes 和 libs 的路径。 如:--with-mysql-includes=/path/to/mysql/include --with-mysql-libs=/path/to/mysql/lib

注意:是否使用 --with-mysql-includes 和 --with-mysql-libs 参数,只跟 sphinx 是否可以找到 mysql_config 文件有关, 二者选其一即可

配置 csft.conf

导入测试数据:

$ mysql -uroot -p test < /usr/local/src/coreseek-4.1-beta/csft-4.1/example.sql
Enter password:

配置 csft.conf,coreseek 默认会找 安装目录下的 etc/csft.conf 作为配置文件

$ cd /usr/local/coreseek/
$ cp etc/sphinx-min.conf.dist etc/csft.conf

首先进入 MySQL 查看 client - connection - server - results 四项的编码,需要保持一致,以下 coreseek 的配置也要保持编码一致

mysql> show variables like 'character_set_%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8                             |
| character_set_connection | utf8                             |
| character_set_database   | utf8                             |
| character_set_filesystem | binary                           |
| character_set_results    | utf8                             |
| character_set_server     | utf8                             |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.01 sec)

这里使用的 utf8 编码,如果你使用的 gbk 编码,可能需要额外转换你的 mmseg 分词词库为 gbk 了。

编辑 etc/csft.conf, 1) 配置要索引的数据库:

source src1
{
    type                = mysql

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

    # 设置数据库编码
    sql_query_pre       = SET NAMES utf8

    ...
}

2) 配置中分分词:

index test1
{
    ...

    # 中文分词词典文件 uni.lib 的目录
    charset_dictpath    = /usr/local/mmseg3/etc/
    # 启用中文分词功能
    charset_type        = zh_cn.utf-8
}

测试

1) 索引

$ ./bin/indexer --all

Coreseek Fulltext 4.1 [ Sphinx 2.0.2-dev (r2922)]
Copyright (c) 2007-2011,
Beijing Choice Software Technologies Inc (http://www.coreseek.com)

 using config file '/usr/local/coreseek/etc/csft.conf'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.014 sec, 12906 bytes/sec, 267.48 docs/sec
skipping non-plain index 'testrt'...
total 3 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg

如果你的 coreseek 安装目录下没有 etc/csft.conf 默认配置文件,使用 -c /path/to/filename.conf 指定配置文件,如:

$ ./bin/indexer -c etc/sphinx-min.conf.dist --all

2) 搜索

$ ./bin/search "this is a test"

Coreseek Fulltext 4.1 [ Sphinx 2.0.2-dev (r2922)]
Copyright (c) 2007-2011,
Beijing Choice Software Technologies Inc (http://www.coreseek.com)

 using config file '/usr/local/coreseek/etc/csft.conf'...
index 'test1': query 'this is a test ': returned 0 matches of 0 total in 0.000 sec

words:
1. 'this': 4 documents, 4 hits
2. 'is': 4 documents, 4 hits
3. 'a': 0 documents, 0 hits
4. 'test': 3 documents, 5 hits

index 'testrt': search error: failed to open /usr/local/coreseek/var/data/testrt.sph: No such file or directory.

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

3) 搜索中文

先插入一段中文:

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

重建索引:

$ ./bin/indexer --all

搜索:

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

Coreseek Fulltext 4.1 [ Sphinx 2.0.2-dev (r2922)]
Copyright (c) 2007-2011,
Beijing Choice Software Technologies Inc (http://www.coreseek.com)

 using config file '/usr/local/coreseek/etc/csft.conf'...
index 'test1': query '以后不看电脑了 ': returned 0 matches of 0 total in 0.000 sec

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

index 'testrt': search error: failed to open /usr/local/coreseek/var/data/testrt.sph: No such file or directory.

到此 sphinx 中文分词索引的基本环境完成了。有兴趣的同学可以查看 配置官方版 Sphinx 一元分词,支持中文

Good Luck!

参考

coreseek快速安装:http://www.coreseek.cn/products-install/install_on_bsd_linux/
中文分词核心配置:http://www.coreseek.cn/products-install/coreseek_mmseg/
转载请注明出处。
本文地址:http://blog.aboutc.net/linux/47/linux-configure-sphinx-chinese-word-segmentation

评论:0

关闭高亮高亮 分享到新浪微博分享到新浪微博