全文检索的实现方式

近段时间公司项目的需要,需要对新闻资讯进行全文检索。

新闻资讯总的访问量是日pv1000万,这其中有点水分,有些是爬虫爬的。历史数据量大概是500万+,性能要求支持400个并发请求。页面加载速度需要在1.5秒内加载完毕。

所以针对全文检索这块一开始考虑到使用sphinx或者lucence。最终选择了sphinx,一是它的配置相对来说简单,另外它的效率比较高。但是它对中文的分词支持不太好,google了下,基于sphinx的coreseek和sphinx for chinese在中文检索方面还是不错的。但是coreseek搜索了下,竟然连官网都访问不了了。pass掉。sphinx for chinses的版本又大都是12年的,太旧。最后在github上找到了https://github.com/eric1688/sphinx。这个相对来说是比较新的版本。

1.安装

 ①cd /usr/local/src

git clone https://github.com/eric1688/sphinx

②cd sphinx

       ./configure --prefix=/usr/local/sphinx --with-mysql

③make && make install


安装的过程可能会出现以下问题:

* 如果服务器没有事先安装mysql客户端,需要先安装

yum install mysql-devel

然后在执行./configure

* libiconv的问题


这个是源码本身存在的问题,解决

vi src/Makefile

 把LIBS = -lexpat -ldl -lm -lz -L/usr/local/lib -lrt  -lpthread


     改成


   LIBS = -lexpat -ldl -lm -lz -liconv -L/usr/local/lib -lrt  -lpthread



然后重新make

④安装成功后生成xdict二进制词库。sphinx for chinese使用的分词库是xdict

cd /usr/local/src/sphinx/

/usr/local/sphinx/bin/mkdict   xdict_1.1.txt   xdict 

cp xdict /usr/local/etc/

注意:有时mkdict的时候会出现找不到liconv.so.2

解决:mkdict的时候加ldd ,即ldd /usr/local/sphinx/bin/mkdict  xdict_1.1.txt   xdict

⑤修改配置文件

cd /usr/local/sphinx/etc/

mv sphinx.conf.dist sphix.conf

关于配置文件的相关参数,我就不做过多描述了。这里有前人写的一篇博客。描述的很详细。

http://www.cnblogs.com/yjf512/p/3598332.html

⑥生成索引

/usr/local/sphinx/bin/indexer --all

注:如果在sphinx已经启动的情况下,直接执行上面的命令,会报错如下:


怎么办呢?加一个--rotate参数就可以了。即 /usr/local/sphinx/bin/indexer --all --rotate

⑦启动

/usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf

查看是否启动

ps -ef|grep searchd


⑧cronjob更新索引

sphinx本身不会自动更新索引,所以一旦有新的数据进来或修改原来的数据。怎么办?job定时更新是个选择。但是job更新有个问题,如果你的数据库数据非常庞大,超过1000万,更新索引的话也会比较慢。怎么办?可以通过建立主索引和二级索引的方式。

①mysql里新建一张表,记录上次主索引获取的·最后一个文章的id,比如max_doc_id记录主索引最后一个文章的id,counter_id记录统计的标识id。因为一个配置文件可能会有多个索引,我们需要区别是哪个的max_doc_id。.


②sphinx.conf里配置,主索引获取数据<=counter_id的,二级索引获取数据>counter_id

例如:

主索引数据来源


二级索引数据来源


③创建主索引和二级索引的脚本文件,主索引放到晚上执行,比如1:00,因为数据量大嘛。二级索引可以根据数据增加的情况,设置半个小时或15分钟执行一次。

主索引build_main_index.sh


二级索引build_delta_index.sh


放到job里执行

*/15 * * * * /bin/sh /var/www/html/sphinx_scripts/build_delta_index.sh 

30 2 * * *  /bin/sh /var/www/html/sphinx_scripts/build_main_index.sh

以上是sphinx for chinese安装和配置,下一篇讲php里如何使用sphinx进行全文检索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值