Sphinx实时索引

数据中的数据很大,然后我有些新数据后来加入到数据中,也希望能够检索到,全部重新建立索引很消耗资源,这样需要用到“主索引+增量索引”的思路来解决,这个模式实现的基本原理是设置两个数据源和两个索引。

1、创建一个计数器

一个简单的实现是,在数据库中增加一个计数器,记录将文档集分为两个部分的文档ID,每次重新构建主索引时,更新这个表。

现在mysql中插入一个计数表

CREATE TABLE sph_counter(
counter_id int not null primary key,
max_doc_Id int not null
);

2、再次修改配置文件

主数据源,增量数据源,主索引,增量索引。

主数据源里面:我们需要把预查询语句改成下面的语句

vi /usr/local/coreseek/etc/csft.conf

--主数据源
source main
{
    sql_query_pre = replace into sph_counter select 1,max(id) from post
    sql_query=select id,title,content from post where id <= (select max_doc_id from sph_counter where counter_id=1) 
}
--打开增量数据源
source delta : main
{
        sql_query_pre=set names utf8
        sql_query=select id,title,content from post where id > (select max_doc_id from sph_counter where counter_id=1)
}
--主索引(不用变)
--增量索引
index delta : main
{
        source                  = delta
        path                    = /usr/local/coreseek/var/data/delta
       #morphology              = stem_en
}
--生成增量索引
[root@localhost bin]# ./indexer delta --rotate

crontab计划任务脚本定时更新索引

[root@localhost bin]# cd /usr/local/coreseek/
--创建脚本执行日志文件
[root@localhost coreseek]# cd var/log/
[root@localhost log]# touch main.log
[root@localhost log]# touch delta.log
[root@localhost log]# ls
delta.log  main.log  query.log  searchd.log  searchd.pid
--创建存放脚本文件夹和文件
[root@localhost coreseek]# mkdir init
[root@localhost init]# touch main.sh
[root@localhost init]# touch delta.sh
[root@localhost init]# ls
delta.sh  main.sh

[root@localhost init]# vi main.sh
------------------------------main.sh--------------------------------------
#!/bin/bash
#main.sh

/usr/local/coreseek/bin/indexer main --rorate >>/usr/local/coreseek/var/log/main.log
------------------------------------------------------------------------------

[root@localhost init]# vi delta.sh 
------------------------------delta.sh--------------------------------------
#!/bin/bash
#delta.sh

/usr/local/coreseek/bin/indexer delta --rorate >>/usr/local/coreseek/var/log/delta.log
------------------------------------------------------------------------------

最后,我们需要脚本能够自动运行,以实现增量索引每5分钟重新建立,和主索引只在凌晨2:30时重新建立。

[root@localhost init]# crontab -e

*/5 * * * * /usr/local/coreseek/init/delta.sh    --每5分钟执行一次增量索引
30 2 * * * /usr/local/coreseek/init/main.sh     --每天凌晨建立主索引

--加脚本的执行权限
[root@localhost init]# chmod a+x *
--计划任务已启动
[root@localhost init]# crontab -l
*/5 * * * * /usr/local/coreseek/init/delta.sh
00 03 * * * /usr/local/coreseek/init/main.sh
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值