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

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

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

实现原理:

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

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

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

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

实际操作:

先创建一张表记录ID

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

#在索引创建好之后把最后一条记录的ID存放到A表中

sql_query_post  =UPDATE a SET max_id=(SELECT max(id) FROM dede_archives)

添加一个增量数据源

#增量数据源

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脚本

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值