网上sphinx 主从索引增量配置都只能对新的记录ID进行增量?
网上sphinx 主从索引增量配置都只能对新的记录ID进行增量?对旧的主索引里的数据进行更新改变后,如何更新索引?
网上的流程是:
1) 建立一个增量索引计数表:sph_counter (counter_id ,max_doc_id)
2)配置一个主索引数据源: src1
sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM products
在生成主索引的时候把目标数据表products的最大主键id保存到计数表 sph_counter
然后
sql_query = SELECT `id`, `title`, `desc` \
FROM products WHERE `id` <= ( SELECT `max_doc_id` FROM sph_counter WHERE counter_id = 1 )
这样会将max_doc_id之前的数据生成主索引src1_index
3)配置增量索引继承主索引的配置: src1_delta
sql_query = SELECT `id`, `title`,`desc` \
FROM products WHERE `id` > ( SELECT `max_doc_id` FROM sph_counter WHERE counter_id = 1 )
也就是说增量索引文件的信息只包括了max_doc_id之后的记录。
4)写shell脚本把生成索引命令行加入crontab定时任务
比如每3分钟生成一次增量索引,每天晚上2点合并一次主从索引。
细心的你就会发现,按照这种配置,每次3分钟生成的索引都是这3分钟内新插入的记录信息,至于3分钟内由于更新旧记录而产生的信息变更是不会生成到增量索引中的,那么每天晚上合并主从索引也会遗漏更新的记录变更,对吗?
由此我感觉只有每天晚上重新对所有数据重新生成索引而不是合并索引才是正确的,但这样的话就没有必要用到表sph_counter了吧,直接查询的时候从增量索引和主索引里搜索结果就行了。
请用过的帮忙解释下,指出我的理解是不是有误,谢谢!难道这是一个重要的,但很久不为人知的发现吗??