centos 7 coreseek-4.1-beta服务安装

1.coreseek简介

首先coreseek是基于sphinx(目前流行的全文搜索引擎),增加了中文分词功能,效果比较不错。世面上还有一些具有分词的功能的软件 eg:Scws ,其也可以和sphinx组合完成中文分词搜索(Scws + Sphinx)。

目前coreseek的稳定版本在coreseek3.2, coreseek4.1为现在测试版本。coreseek3.2在其sphinx配置文件中支持的属性有限,

有支持sql_attr_uint,sql_attr_bool,sql_attr_bigint,sql_attr_timestamp,sql_attr_str2ordinal,sql_attr_float,sql_attr_multi等,4.1增加了对字符串的支持sql_attr_string,sql_field_string等,以上以sql_attr开头的属性sphinx只对其做存储,检索不使用; sql_field开头用于检索。

2.从网上下载coreseek4.1版本的文件coreseek-4.1-beta.tar.gz,进入centos7下coreseek安装步骤

 

#安装依赖包
[root@E sphinx]# yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel

#解压缩
[root@E sphinx]# tar zxvf coreseek-4.1-beta.tar.gz

#安装mmseg
[root@E sphinx]# cd coreseek-4.1-beta/mmseg-3.2.14/
[root@E mmseg-3.2.14]# ./bootstrap #输出的warning信息可以忽略,如果出现error则需要解决
[root@E mmseg-3.2.14]# ./configure --prefix=/usr/local/mmseg3
[root@E mmseg-3.2.14]# make && make install
[root@E mmseg-3.2.14]# cd ..

##安装coreseek
[root@E coreseek-4.1-beta]# cd csft-4.1/
[root@E csft-4.1]# sh buildconf.sh #输出的warning信息可以忽略,如果出现error则需要解决
[root@E csft-4.1]# ./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
 
[root@E csft-4.1]# make && make install
[root@E csft-4.1]# cd ..

#测试mmseg分词,coreseek搜索(需要预先设置好字符集为zh_CN.UTF-8,确保正确显示中文)
[root@E coreseek-4.1-beta]# cd testpack/
[root@E testpack]# cat var/test/test.xml #此时应该正确显示中文
#mmseg程序 -d 词库目录 指定数据源
[root@E testpack]# /usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml
#创建索引
[root@E testpack]# /usr/local/coreseek/bin/indexer -c etc/csft.conf --all
#执行搜索测试
[root@E testpack]# /usr/local/coreseek/bin/search -c etc/csft.conf 网络搜索
#测试成功
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 'etc/csft.conf'...
index 'xml': query '网络搜索 ': returned 1 matches of 1 total in 0.000 sec
displaying matches:
1. document=1, weight=1590, published=Thu Apr 1 22:20:07 2010, author_id=1
words:
1. '网络': 1 documents, 1 hits
2. '搜索': 2 documents, 5 hits

编译coreseek遇到的问题,见该博客另一片文章。

以上是对xml为源数据进行索引,中文搜索的步骤。

coreseek-4.1-beta/testpack/etc 文件夹下包含所有类型生成索引的配置文件,其中csft_mysql.conf是以mysql数据库为源的
下面看下csft_mysql.conf中的内容

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

#源定义
source mysql
{
    type                    = mysql

    sql_host                = localhost
    sql_user                = root
    sql_pass                = 
    sql_db                    = test
    sql_port                = 3306
    sql_query_pre            = SET NAMES utf8

    sql_query                = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents
                                                              #sql_query第一列id需为整数
                                                              #title、content作为字符串/文本字段,被全文索引
    sql_attr_uint            = group_id           #从SQL读取到的值必须为整数
    sql_attr_timestamp        = date_added #从SQL读取到的值必须为整数,作为时间属性

    sql_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集
    sql_query_info            = SELECT * FROM documents WHERE id=$id #命令行查询时,从数据库读取原始数据信息
}

#index定义
index mysql
{
    source            = mysql             #对应的source名称
    path            = 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_dictpath = etc/                             #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8
}

#全局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 = var/log/searchd_mysql.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    log = var/log/searchd_mysql.log        #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    query_log = var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    binlog_path =                                #关闭binlog日志
}

如果想要简单的运行下mysql的中文源搜索,注意要修改下里面的数据库配置,里面文件的路径,在实际应用中我用的绝对路径。使用过程中有可能报无法连接mysql.sock的问题(index ‘mysql’: sql_connect: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock),查找自己mysql启动后,mysql.sock所在的实际路径,在csft_mysql.conf文件中明确设置下,下面是我实际中运行的csft_mysql.conf文件内容。

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

#源定义
source mysql
{
    type                    = mysql

    sql_host                = localhost
    sql_user                = root
    sql_pass                = 
    sql_db                    = test
    sql_port                = 3306
    sql_query_pre            = SET NAMES utf8
    sql_sock		     = /tmp/mysql.sock
    sql_query                = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title,content FROM documents
                                                              #sql_query第一列id需为整数
                                                              #title、content作为字符串/文本字段,被全文索引
    sql_attr_uint            = group_id           #从SQL读取到的值必须为整数
    sql_attr_timestamp        = date_added #从SQL读取到的值必须为整数,作为时间属性

    sql_attr_string   = title
    sql_attr_string   = content

    sql_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集
    sql_query_info            = SELECT * FROM documents WHERE id=$id #命令行查询时,从数据库读取原始数据信息
}

#index定义
index mysql
{
    source            = mysql             #对应的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_dictpath = etc/                             #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8
}

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

#searchd服务定义
searchd
{
    listen                  =   9312
    listen                  = 9306:mysql41
    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日志
}

我的mysql.sock路径为/tmp/mysql.sock。具体的sphinx详细的mysql配置见该博客下另一篇文章。

将/usr/local/coreseek/etc/example.sql导入到mysql数据库中,下面的配置文件中的查询语句是基于example.sql中的数据表

 

下面是mysql源的操作如下:

#创建mysql数据源索引成功
[root@E testpack]# /usr/local/coreseek/bin/indexer -c etc/csft_mysql.conf --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 'etc/csft_mysql.conf'...
indexing index 'mysql'...
collected 3 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 3 docs, 7545 bytes
total 0.016 sec, 467269 bytes/sec, 185.79 docs/sec
total 3 reads, 0.000 sec, 2.8 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 2.2 kb/call avg, 0.0 msec/call avg
 
#测试mysql数据源 搜索
[root@E testpack]# /usr/local/coreseek/bin/search -c etc/csft_mysql.conf 网络搜索
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 'etc/csft_mysql.conf'...
index 'mysql': query '网络搜索 ': returned 1 matches of 1 total in 0.000 sec
displaying matches:
1. document=1, weight=1590, group_id=2, date_added=Thu Apr 1 22:20:07 2010
        id=1
        title=愚人节最佳蛊惑爆料 谷歌300亿美元收购百度
        content=据国外媒体报道,谷歌将巨资收购百度,......<正文省略很多字>......李彦宏也承认当前百度在日本还处于初级发展阶段,但他也预言“2012年,百度与Google划洋而治”,对此我们拭目以待!
        date_added=2010-04-01 22:20:07
        author_id=1
        group_id=2
words:
1. '网络': 1 documents, 1 hits

 

重建索引时报错误:WARNING: failed to open pid_file ‘/usr/local/coreseek/var/log/searchd_mysql.pid’.

解决方法:
试着停止一下coreseek服务
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf –stop 停止服务

然后重启
/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 建立索引

如果提示:FATAL: failed to lock /usr/local/coreseek/var/data/xxxx.spl: Resource temporarily unavailable, will not index. Try –rotate option.

则尝试重建索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf –all –rotate 重建索引

3.php测试coreseek

sphinx提供了专门的api文件sphinxapi.php在coreseek-4.1-beta/testpack/api文件夹下面
测试方法一:将sphinxapi.php放到测试目录下,在测试目录下编辑如下文件

header("Content-type: text/html; charset=utf-8");
    //require("./    ");
    $s = new SphinxClient;
    $s->setServer("127.0.0.1", 9312);
    //SPH_MATCH_ALL, 匹配所有查询词(默认模式); SPH_MATCH_ANY, 匹配查询词中的任意一个; SPH_MATCH_EXTENDED2, 支持特殊运算符查询
    $s->setMatchMode(SPH_MATCH_ALL);
    $s->setMaxQueryTime(30);                                        //设置最大搜索时间
    $s->SetArrayResult(false);                                        //是否将Matches的key用ID代替
    $s->SetSelect ( "*" );                                            //设置返回信息的内容,等同于SQL
    $s->SetRankingMode(SPH_RANK_BM25);
    $s->SetLimits ( 0, 30, 1000, 0 );                                //设置结果集偏移量  SetLimits 
    $res = $s->query('coreseek','mysql','--single-0-query--');         #[coreseek]关键字,[mysql]数据源source
    
    $err = $s->GetLastError();
    echo '<pre>';
    var_dump($res);
    var_dump($res['matches']);
    var_export($err);
    echo '</pre>';

shell下执行php test.php命令,结果如下图:

centos 7 coreseek-4.1-beta服务安装

测试方法二:安装php sphinx扩展

【第一步】:

# 进入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

【第二步】

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

# ./configure –with-php-config=/usr/bin/php-config –with-sphinx=/usr/local/sphinxclient  执行时有可能报错 configure: error: Cannot find php-config. Please use –with-php-config=PATH
centos 7 coreseek-4.1-beta服务安装

修改下php-config的路径就行了, # ./configure –with-php-config=/usr/local/php/bin/php-config –with-sphinx=/usr/local/sphinxclient

特别注意编译完之后会生成sphinx.so 需要添加到php扩展中去。

安装完PHP的Sphinx扩展后,就可以直接使用$coreseek = new SphinxClient();而无需引入源文件了。

测试文件如下:

      $sphinx = new SphinxClient();

       $sphinx->SetServer("127.0.0.1",9312);

       $sphinx->SetMatchMode(SPH_MATCH_ALL);

       $sphinx->SetLimits(0, 20, 1000);

       $sphinx->SetArrayResult(true);

       $result = $sphinx -> query("LSGO实验室","mysql`");

      print_r($result);

centos 7 coreseek-4.1-beta服务安装

上图中sql_attr_string 中对应数据库中的title,但打印出来显示的是数字。这种原因是 php的sphinx扩展的版本不对导致的;当前用的版本为sphinx-1.1.0,对应coreseek3.2.14版本,1.1.0是个分界线;

centos 7 coreseek-4.1-beta服务安装

下载sphinx-1.3.3.tgz重新编译,生成sphinx.so,然后重新执行结果如图:

centos 7 coreseek-4.1-beta服务安装

上图为结果值。

参考文件:

http://blog.csdn.net/baidu_30000217/article/details/51774581

http://blog.csdn.net/baidu_30000217/article/details/51771263

http://www.111cn.net/sys/CentOS/63329.htm

http://www.cnblogs.com/zhangyabin—acm/p/5926054.html

http://www.jianshu.com/p/240c00982e08

资料文件下载:

coreseek-4.1-beta.tar.gz

sphinx-2.2.11-1.rhel7.x86_64.zip

 

coreseek 中文参考手册 :http://github.tiankonguse.com/doc/sphinx/coreseek_4.1-sphinx_2.0.1-beta.html

 coreseek4.1 中文参考手册地址:http://github.tiankonguse.com/doc/sphinx/coreseek_4.1-sphinx_2.0.1-beta.html

声明:本站资源绿色无后门无广告,可放心下载。如无特殊说明或标注,均为本站原创发布,转载请注明出处!