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