CentOS 6.5环境准备

$  locale
LANG=zh_CN.UTF-8
LC_ALL="zh_CN.UTF-8"

##以下为核心项,locale为zh_CN.UTF-8,就可以正常显示和输入中文;locale设置功能由操作系统自身支持,BSD/Linux均可开启;该功能,不是coreseek提供的!!!
##如果不能正常显示中文,则后面的中文测试部分无法正常进行,但不会影响coreseek的实际功能;

依赖包安装:

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

安装coreseek开发的mmseg,为coreseek提供中文分词功能

cd coreseek-4.1-beta
cd mmseg-3.2.14
./bootstrap
./configure --prefix=/usr/local/mmseg3
make && make install

遇到的问题:
error: cannot find input file: src/Makefile.in
或者遇到其他类似error错误时...

解决方案:
依次执行下面的命令,我运行'aclocal'时又出现了错误,解决方案请看下文描述

yum -y install libtool //看上方环境准备

安装coreseek

$ cd csft-3.2.14 或者 cd csft-4.0.1 或者 cd csft-4.1
$ sh 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=/usr/local/mysql
##coreseek4.x/sphinx1.x,请将--without-mysql更改为--with-mysql

##如果提示mysql问题,可以查看MySQL数据源安装说明   http://www.coreseek.cn/product_install/install_on_bsd_linux/#mysql
$ make && make install
$ cd ..

##命令行测试mmseg分词,coreseek搜索(需要预先设置好字符集为zh_CN.UTF-8,确保正确显示中文)
$ cd testpack
$ cat var/test/test.xml    #此时应该正确显示中文
$ /usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml
$ /usr/local/coreseek/bin/indexer -c etc/csft.conf --all
$ /usr/local/coreseek/bin/search -c etc/csft.conf 网络搜索

下面开始sphinx与mysql的配置

创建sphinx统计表,在coreseek_test库中执行。

CREATE TABLE sph_counter
(
    counter_id INTEGER PRIMARY KEY NOT NULL,
    max_doc_id INTEGER NOT NULL
);

创建配置sphinx与mysql的配置文件

# vi /usr/local/coreseek/etc/csft_mysql.conf

#MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/
#请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库

#源定义
source main                                             #定义源名称
{
    type                    = mysql

    sql_host                = localhost
    sql_user                = root
    sql_pass                = 123456
    sql_db                = coreseek_test
    sql_port                = 3306
    sql_query_pre          = SET NAMES utf8         
    sql_query_pre          = REPLACE INTO sph_counter SELECT 1,MAX(id) FROM hr_spider_company;                                      # 更新sph_counter
    sql_query              = SELECT * FROM hr_spider_company WHERE id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )    # 根据sph_counter纪录ID读入数据
                                                         #sql_query第一列id需为整数
                                                         #title、content作为字符串/文本字段,被全文索引,请参考数据库实际字段
    sql_attr_uint           = from_id                  #从SQL读取到的值必须为整数,请参考数据库实际字段
    sql_attr_uint           = link_id                  #从SQL读取到的值必须为整数,请参考数据库实际字段
    sql_attr_uint           = add_time                #从SQL读取到的值必须为整数,请参考数据库实际字段
}

#增量源定义
source delta : main                                     #注意与定义名称的统一性
{
    sql_query_pre          = SET NAMES utf8
    sql_query              = SELECT * FROM hr_spider_company WHERE id>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 ) # 根据sph_counter纪录ID读入数据
    sql_query_post_index    = REPLACE INTO sph_counter SELECT 1,MAX(id) FROM hr_spider_company                                      # 更新sph_counter
}

#index定义
index main                                              #注意与定义名称的统一性
{
    source            = main                                          #对应的source名称
    path                = /usr/local/coreseek/var/data/mysql            #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    docinfo          = extern
    mlock              = 0
    morphology        = none
    min_word_len        = 1
    html_strip        = 0

    #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
    charset_dictpath    = /usr/local/mmseg3/etc/                         #BSD、Linux环境下设置,/符号结尾
    charset_type        = zh_cn.utf-8
}

index delta : main                                      #注意与定义名称的统一性
{
    source            = delta
    path                = /usr/local/coreseek/var/data/delta
}

#全局index定义
indexer
{
    mem_limit           = 128M
}

#searchd服务定义
searchd
{
    listen            = 9312
    read_timeout        = 5
    max_children        = 30
    max_matches      = 1000
    seamless_rotate  = 0
    preopen_indexes  = 0
    unlink_old        = 1
    pid_file            = /usr/local/coreseek/var/log/searchd_mysql.pid   #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    log              = /usr/local/coreseek/var/log/searchd_mysql.log   #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    query_log          = /usr/local/coreseek/var/log/query_mysql.log     #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    binlog_path      =                                               #关闭binlog日志
}

我的测试表名为hr_spider_company,你只需要根据实际需求更改为自己的表名即可。
调用命令列表:
启动后台服务(必须开启)

# /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf

执行索引(查询、测试前必须执行一次)

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

执行增量索引

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf delta --rotate

合并索引

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --merge main delta --rotate --merge-dst-range deleted 0 0

(为了防止多个关键字指向同一个文档加上–merge-dst-range deleted 0 0)
后台服务测试

# /usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/csft_mysql.conf  aaa

关闭后台服务

# /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf --stop

自动化命令:

crontab -e

*/1 * * * * /bin/sh /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf delta --rotate
*/5 * * * * /bin/sh /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --merge main delta --rotate --merge-dst-range deleted 0 0
30 1 * * *  /bin/sh /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate

以上任务计划的意思是:每隔一分钟执行一遍增量索引,每五分钟执行一遍合并索引,每天1:30执行整体索引。

Sphinx扩展安装安装

Coreseek官方教程中建议php使用直接include一个php文件进行操作,事实上php有独立的sphinx模块可以直接操作coreseek(coreseek就是sphinx!)已经进入了php的官方函数库,而且效率的提升不是一点点!但php模块依赖于libsphinxclient包。

[第一步] 安装依赖libsphinxclient

# cd /var/install/coreseek-4.1-beta/csft-4.1/api/libsphinxclient/
# ./configure  --prefix=/usr/local/sphinxclient

configure: creating ./config.status
config.status: creating Makefile
config.status: error: cannot find input file: Makefile.in   #报错configure失败    

//处理configure报错
编译过程中报了一个config.status: error: cannot find input file: src/Makefile.in这个的错误,然后运行下列指令再次编译就能通过了:
# aclocal
# libtoolize --force
# automake --add-missing
# autoconf
# autoheader
# make clean

//从新configure编译
# ./configure

# make && make install

[第二步] 安装sphinx的PHP扩展

http://pecl.php.net/package/sphinx
# wget http://pecl.php.net/get/sphinx-1.3.0.tgz
# tar zxvf sphinx-1.3.0.tgz
# cd sphinx-1.3.0
# phpize
# ./configure --with-php-config=/usr/bin/php-config --with-sphinx=/usr/local/sphinxclient
# make && make install
# cd /etc/php.d/
# cp gd.ini  sphinx.ini
# vi sphinx.ini

extension=sphinx.so

# service php-fpm restart

打开phpinfo看一下是否已经支持了sphinx模块。
php调用sphinx示例:

<?php
    $s = new SphinxClient;
    $s->setServer("127.0.0.1", 9312);

    $s->setMatchMode(SPH_MATCH_PHRASE);
    $s->setMaxQueryTime(30);
    $res = $s->query("宝马",'main'); #[宝马]关键字,[main]数据源source
    $err = $s->GetLastError();
    var_dump(array_keys($res['matches']));
    echo "<br>"."通过获取的ID来读取数据库中的值即可。"."<br>";

    echo '<pre>';
    var_dump($res);
    var_dump($err);
    echo '</pre>';