有这么一种常见的情况:整个数据集非常大,以至于难于经常性的重建索引,但是每次新增的记录却相当地少。一个典型的例子是:一个论坛有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,按上述步骤,没什么问题可以成功实现!
https://blog.csdn.net/hxy_jci/article/details/9129693