sphinx中文分词coreseek在linux下的安装、配置以及使用方法(入门菜鸟级)

作者:腾睿互动时间:2013-09-05点击:858

成都网站建设--腾睿设计的经验之谈:

最近为公司的项目做分词搜索,于是安装coreseek。但是本人之前只是使用过,根本没有安装过呀,搞个JJ啊。没办法,牛B已经吹了,只能吹爆。

开始在网上找安装教程,发现其实就两篇可用,一篇是官网上的,但是他后面的配置讲得不全,另一篇的安装部分跟官网是一样的,但是他把后面的配置也讲了,于是开始安装,我的安装步骤如下:

1、安装支持的工具,(用yum非常方便,安装过程中如果碰到有什么Waring:xxxx not command这种的,可以直接 yum install xxx,哪里不会Y哪里,妈妈再也不用担心我的XX,哈哈。)

$ yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel
2、下载coreseek安装包,官网一共三个版本,3.2 4.0 4.1,教程上安装的是3.2,不过因为我后期有问题,每个版本都安装过,所以
,经过我的测试,好象3.2生成索引有问题,也可能是我配置不对,我下载的是4.1的。
$ wget http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.1-beta.tar.gz
或者http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz
或者http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.0.1-beta.tar.gz
如果你的系统联上网,就会开始下载了。

下载完成后,解压

$ tar xzvf coreseek-3.2.14.tar.gz 或者 coreseek-4.0.1-beta.tar.gz 或者 coreseek-4.1-beta.tar.gz
$ cd coreseek-3.2.14 或者 coreseek-4.0.1-beta 或者 coreseek-4.1-beta

--------------------------------割那什么-------------------------------------------------------
安装mmseg
$ cd mmseg-3.2.14
$ ./bootstrap    #输出的warning信息可以忽略,如果出现error则需要解决
$ ./configure --prefix=/usr/local/mmseg3
$ make && make install
$ cd ..
安装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
$ make && make install
$ cd ..

配置MYSQL数据源
vi /usr/local/coreseek/etc/csft.conf
这里要说明一下的是,教程上的大哥的配置文件啊,虽然是对的,但是他里面没有索引中文字段,导致象我这种菜鸟最后没办法搜索中文,
找不到北,这也是为什么我说我三个版本都安装过的原因了。

为了避免象我这样的菜鸟重蹈我的复辙,我把我的配置文件摘录出来 source src1{          type = mysql          sql_host = localhost          sql_user = yuewanguser          sql_pass = 111111          sql_db = yuewang          sql_port = 3306          sql_query_pre = SET NAMES utf8          sql_query = SELECT goods_id,goods_name,cate_id,store_id,brand FROM yw_goods WHERE if_show=1 AND closed=0          sql_attr_uint = cate_id          sql_field_string = brand          sql_field_string = goods_name          sql_query_info_pre = SET NAMES utf8          sql_query_info =  SELECT goods_id,goods_name,cate_id,store_id,brand FROM yw_goods WHERE if_show=1 AND closed=0 AND goods_id=$id }  index src1{          source = src1          path = /usr/local/coreseek/var/data/src1/          docinfo = extern          mlock =0          morphology = none          min_word_len =1          html_strip =0          charset_type = zh_cn.utf-8         charset_dictpath = /usr/local/mmseg3/etc/          #charset-table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F          #ngram_len = 1          #ngram_chars = U+3000 ..U+2FA1F } indexer{          mem_limit = 128M }  searchd{          listen = 9312          read_timeout =5          max_children = 1000          max_matches = 10000          seamless_rotate = 1          preopen_indexes = 1          unlink_old = 1          pid_file = /usr/local/coreseek/var/log/searchd_rtindex.pid          log = /usr/local/coreseek/var/log/searchd_rindex.log          query_log = /usr/local/coreseek/var/log/query_rtindex.log }

这里要注意一点的是,在数据源src1当中,字符串字段的声明,一定要用sql_field_string,这样声明才会被搜索,不能用sql_attr_string,这样声明的,会被索引出来,但是不会被用来搜索,就是因为
教程里没有这样的声明,导至我用的
sql_attr_string,一直没办法搜索到结果,绕了很久,慢慢看手册,才发现这个。。。。老鸟略过哈,这都是菜鸟的辛酸泪。

其他配置说明:
a. source是配置数据源,按照提示输入MYSQL的主机、帐号、密码和数据库即可,我的MYSQL就安装在本机上(MYSQL的安装可自行百度)

b. sql_query_pre是在执行查询之前执行的SQL语句。(注意:在coreseek只能识别utf8字符集编码,所以我们要执行转换一下)

c. sql_query是要查询进行索引的SQL语句,sql_attr_unit和sql_attr_timestamp是设置属性的,属性在全文检索中可以用来设置过滤和排序。

d.  index和source应该是成对出现,index就是配置索引的功能(我们还可以配置多个索引 主索引+增量索引的功能)

e. searchd是常驻进程的全文检索服务,默认监控本机的9312端口

f. charset_type和charset_dictpath是中文分词配置


配置文件写好以后,就可以索引了,来吧BABY,COME ON BABY
$  /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all
如果没有什么报错啊,警告啊,失败啊,LOCK啊之类的信息,那么索引就生成成功了。
这个时候肯定有人问,万一有什么报错啊,警告啊,失败啊,LOCK啊之类的信息出现了怎么办怎么办呀,唉呀不得了啦,我是没出现啊,所以我也不知道怎么办呀。。。。
PS:把报错信息复制出来,google一下,百度一下,一般都有文章可以解决的。
正常情况的显示一般大概也许可能是
Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]
    Copyright (c) 2007-2010,
    Beijing Choice Software Technologies Inc (http://www.coreseek.com)

     using config file 'etc/csft.conf'...
    indexing index 'xml'...
    collected 3 docs, 0.0 MB
    sorted 0.0 Mhits, 100.0% done
    total 3 docs, 7585 bytes
    total 0.075 sec, 101043 bytes/sec, 39.96 docs/sec
    total 2 reads, 0.000 sec, 5.6 kb/call avg, 0.0 msec/call avg
    total 7 writes, 0.000 sec, 3.9 kb/call avg, 0.0 msec/call avg

 开启服务
$  /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf
同样的,有报错等杂七杂八的信息就解决一下,
正常情况的显示一般大概也许可能是
Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]
    Copyright (c) 2007-2010,
    Beijing Choice Software Technologies Inc (http://www.coreseek.com)

    using config file 'etc/csft.conf'...
    listening on all interfaces, port=9312

启动好之后,就可以测试啦。哦对了,各位同学配置的表中要有数据哈,整点中文的。
先找到安装包里面的接口文件,coreseek-4.1-beta/testpack/api,在这个下面,小弟的项目是PHP的,所以我就拿sphinxapi.php,放到项目中,为了方便大家,我把我的测试代码也贴出来。

header("Content-type: text/html; charset=utf-8");
include(ROOT_PATH."/includes/sphinxapi.php");
$cl = new SphinxClient();

$cl->SetServer("192.168.1.200",9312);
$cl->SetArrayResult(true);
$cl->SetLimits(0,100);
$keyword = "腾睿设计";
        
$cl->SetMatchMode(SPH_MATCH_ANY);
$cl->SetRankingMode ( SPH_RANK_PROXIMITY_BM25 );
$cl->SetFieldWeights (array('goods_name'=>1,'brand'=>2));
$result = $cl->Query($keyword, 'src1');
        
//处理$result
$matches = isset($result['matches']) ? $result['matches'] : '';

print_r($result);

这样,搜索就完成了
但是呢,工作还没完,还有一点,就是要做一个自动索引的计划任务,不然有新的记录增加怎么办呀,不可能每次手动去执行吧。
还记得索引的命令
/usr/local/coreseek/bin/indexer -c  /usr/local/coreseek/etc/csft.conf --all

现在,开始做计划任务

$ crontab -e

按i,增加一条

*/20 * * * * root /usr/local/coreseek/bin/indexer -c  /usr/local/coreseek/etc/csft.conf --all --rotate

参数--rotate的作用是可以在不停止服务的情况下索引。

对了,计划任务记得开启服务

$ /sbin/service crond start

OK,整个流程完毕,希望可以帮到象我这样的初学者,也请各位老鸟匆喷。

(辛苦原创,转载肯请保留出处:成都网站建设--腾睿设计)

您可能感兴趣

热点信息

403603683@qq.com

18980626172

404652714