如果数据库中有新的数据,那么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脚本