sphinx的自动更新+主索引+增量索引

如果数据库中有新的数据,那么sphinx需要重新创建索引

难点:如何确定哪些数据是新数据(还没有创建索引的数据)?

实现原理:

  1. 新建一张表,记录一下上一次已经创建好索引的最后一条记录的ID

  2. 当索引时,然后从数据库中取出所有ID大于上面那个sphinx中的那个ID的数据,这些就是新的数据,然后创建一个小的索引文件

  3. 把上边我们创建的增量索引文件合并到主索引文件上去

  4. 把最后一条记录的ID更新到第一步创建的表中


实际操作:

  1. 先创建一张表记录ID

  2. 修改sphinx的配置文件在主索引创建好之后把已经创建好的最后一条记录的ID保存起来

  #在索引创建好之后把最后一条记录的ID存放到A表中
   sql_query_post  =UPDATE a SET max_id=(SELECT max(id) FROM dede_archives)

  1. 添加一个增量数据源

#增量数据源
source mymovie_zl
{
    type           = mysql
    sql_host        = localhost
    sql_user                = root
    sql_pass                = 123456
    sql_db                  = dedecms831
    sql_port                = 3306
    #命令行查询时,设置正确的字符集
    sql_query_pre           = SET NAMES utf8
    #取出增量的数据
    sql_query       = SELECT a.id,a.title,b.juqing FROM dede_archives a LEFT JOIN  dede_addon7 b  ON a.id=b.aid  
            WHERE  a.id > (SELECT max(id) FROM dede_archives)

    #在索引创建好之后把最后一条记录的ID存放到A表中
    sql_query_post  =UPDATE a SET max_id=(SELECT max(id) FROM dede_archives)

}

#增量数据源索引文件index
index mymovie_zl
{
    #对应的source名称
    source          = mymovie_zl
    #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    path            = C:\myenv\coreseek-3.2.14-win32\var\data\mymovie_zl
    docinfo         = extern
    mlock           = 0
    morphology      = none
    min_word_len    = 1
    html_strip      = 0
    charset_dictpath  = C:\myenv\coreseek-3.2.14-win32\etc 
    charset_type      = zh_cn.utf-8
}

 4.定期为增量数据源生成增量索引文件,将增量索引文件合并到主索引文件

对于windows。添加一个bat脚本

C:\myenv\coreseek-3.2.14-win32\bin>indexer.exe -c C:\myenv\coreseek-3.2.14-win32\sphinx.conf  mymovie_zl
C:\myenv\coreseek-3.2.14-win32\bin>indexer.exe -c C:\myenv\coreseek-3.2.14-win32\sphinx.conf --merge mymovie mymovie_zl 
  --roate

 在windows系统下有一个计划任务可以让这个脚本定期执行

对于linux.可以添加一个shell脚本

转载于:https://my.oschina.net/osmyblog/blog/311530

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值