网上sphinx 主从索引增量配置都只能对新的记录ID进行增量?

yizheng06 2013-01-16 08:53:32
网上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了吧,直接查询的时候从增量索引和主索引里搜索结果就行了。

请用过的帮忙解释下,指出我的理解是不是有误,谢谢!难道这是一个重要的,但很久不为人知的发现吗??
...全文
292 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bloom_1001 2013-03-16
  • 打赏
  • 举报
回复
如果只更新文档属性的话(不更新索引内容),增量索引的方式保持不变,可以通过客户端Api更新(UpdateAttribute)对应的索引,同时更新数据库。
yizheng06 2013-01-23
  • 打赏
  • 举报
回复
目前找到个办法,就是在数据表中添加update_time字段,每次更新数据都修改此字段值,然后在sphinx获取增量数据时将max(update_time)值保存到sph_counter.last_time中,下次获取增量数据时使用条件update_time> sph_counter.last_time来筛选而不用max(id)来筛选。

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧