在索引完成之前,Sphinx过早地执行sql_query_post_index查询

时间:2018-05-04 19:22:38

标签: sphinx

我们在其中一个数据库上运行主索引和delta索引。 delta索引总是与主索引分开,即它在任何时候都不会合并到main中。 delta索引每五分钟运行一次,主索引每四小时完全重新计算一次。完成重新索引需要半小时到一个小时。

我们遇到的问题是,在上次完整重新索引之后添加到数据库的文档将添加到增量索引中,但在下一个完整的重新索引作业启动时会消失。在我们的主索引的Sphinx配置中,我们有以下几行:

sql_query_pre = UPDATE sphinx SET max_doc_id_temp = (SELECT MAX(id) FROM deal) WHERE alias = "merchant_deal_{{ language }}"
...
sql_query_post_index = UPDATE sphinx SET max_doc_id = max_doc_id_temp WHERE alias = "merchant_deal_{{ language }}"

理论上,这应该将max_doc_id_temp设置为完整重新索引作业开始时最近发布的文档的ID。然后,在索引编制完成后,我们将max_doc_id设置为相同的值。增量索引作业仅在ID高于max_doc_id的任何文档上运行。

在实践中,max_doc_id似乎会在完成重新索引作业后大约10-15分钟发生变化,这在新索引完成并到位之前就已存在。这意味着在该点之后计算的任何增量指数都会丢失一些文档,并且在完成重新索引之后,它们不会再出现在Sphinx搜索中。

我认为sql_query_post_index只应运行一次"索引已完全成功完成,"根据Sphinx文档,但似乎可能并非如此。有没有其他方法让这个工作?也许我可以使用不同的sphinx配置参数,或者我们遇到的一些错误导致sql_query_post_index过早运行?

0 个答案:

没有答案