coreseek增量索引的实现及定时执行脚本

有这么一种常见的情况:整个数据集非常大,以至于难于经常性的重建索引,但是每次新增的记录却相当地少。一个典型的例子是:一个论坛有1000000个已经归档的帖子,但每天只有1000个新帖子。

在这种情况下可以用所谓的“主索引+增量索引”(main+delta)模式来实现“近实时”的索引更新。

这种方法的基本思路是设置两个数据源和两个索引,对很少更新或根本不更新的数据建立主索引,而对新增文档建立增量索引。在上述例子中,那1000000个已经归档的帖子放在主索引中,而每天新增的1000个帖子则放在增量索引中。增量索引更新的频率可以非常快,而文档可以在出现几分种内就可以被检索到。

确定具体某一文档的分属那个索引的分类工作可以自动完成。一个可选的方案是,建立一个计数表,记录将文档集分成两部分的那个文档ID,而每次重新构建主索引时,这个表都会被更新。(上述是摘自Coreseek 4.1 参考手册 / Sphinx 2.0.1-beta里的一段话

从上述我们知道增量索引的必要性。废话不说,开始实现:

1,首先我们要新建一张表,我命名为email_delta,字段有两个:counter_id,max_doc_id。这张表是用来存放执行增量索引时,记录此时记录最大值为max_doc_id,那么下次执行增量索引时就只需执行id>max_doc_id即可。

2,修改配置文件:e/coreseek/bin/sphinx.conf

source email
{
 

    sql_query_pre            = SET NAMES utf8
sql_query_pre            =replace into email_delta select 1,max(emailid) from email

    sql_query    = SELECT emailid,fromid,toid,subject,title,content,sendtime,attachement FROM email where 

emailid<=(select max_doc_id from email_delta where counter_id=1)
   
#主索引:重新建立索引
}
source email_delta:email
{

sql_query_pre            =replace into email_delta select 1,max(emailid) from email
    sql_query                = SELECT emailid,fromid,toid,subject,title,content,sendtime,attachement FROM email where

emailid>(select max_doc_id from email_delta where counter_id=1)
#
增量索引:只是对增加的数据建立索引
}
3
,增加了增量索引还不够,当执行完增量索引还要将其和主索引进行合并:要用到--merge

4,主索引可以一天重建一次,增量索引可以每几分钟执行一次,这里就要用到脚本。下面就要写这两个脚本:

a)主索引脚本:main.bat(window)

e:\coreseek\bin\searchd -c e:\coreseek\bin\sphinx.conf –-stop  #停止服务
e:\coreseek\bin\indexer  -c e:\coreseek\bin\sphinx.conf email --all
#重建主索引  
e:\coreseek\bin\searchd -c e:\coreseek\bin\sphinx.conf --console
#启动服务

b)增量脚本:delta.bat(window)

e:\coreseek\bin\searchd -c e:\coreseek\bin\sphinx.conf --stop 
e:\coreseek\bin\indexer -c e:\coreseek\bin\sphinx.conf email_delta --all
#重建增量索引
e:\coreseek\bin\indexer -c e:\coreseek\bin\sphinx.conf -–merge email email_delta --rotate
#合并索引  
e:\coreseek\bin\searchd -c e:\coreseek\bin\sphinx.conf --console

c)windows下实现开机自启动coreseek:在doc键入:searchd –-install -–config e:/coreseek/bin/sphinx.conf

5,在计算机:管理工具->任务计划程序中创立两个任务,使其定时执行这两个脚本。

6,按上述步骤,没什么问题可以成功实现!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值