您的位置:首页 > 运维架构 > Linux

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

2015-01-26 11:40 776 查看
最近为公司的项目做分词搜索,于是安装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 }[code]这里要注意一点的是,在数据源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($_SERVER['DOCUMENT_ROOT']."/sphinx/sphinxapi.php");
$cl = new SphinxClient();
$cl->SetServer("192.168.1.200",9312);
$cl->SetArrayResult(true);
$cl->SetLimits(0,100);
$keyword = "波音飞机博物馆";
$keyword=iconv('gbk','utf-8',$keyword);//Coreseek 的中文分词目前只接受utf-8的中文编码  
$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,整个流程完毕,希望可以帮到象我这样的初学者,也请各位老鸟匆喷。

查询
/usr/local/coreseek/bin/search "波音飞机博物馆"
[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐