如何更新Sphinx主索引和delta索引

时间:2011-01-10 01:30:46

标签: search full-text-search sphinx

我已经阅读了Sphinx文档和各种资源,但我对维护主索引和delta索引的过程感到困惑。如果这是正确的,请告诉我:

  • 有一个表格按last_update_time分区搜索索引(不是教程http://sphinxsearch.com/docs/1.10/delta-updates.html中的ID)

  • 每15分钟更新一次增量索引。增量索引仅获取已更新的记录> last_update_time

    indexer --rotate --config /opt/sphinx/etc/sphinx.conf delta
    
  • 通过使用以下方法合并delta来每小时更新一次主索引:

    indexer --merge main delta --merge-dst-range deleted 0 0 --rotate
    

预查询SQL会将last_update_time更新为NOW(),这会重新分区索引

混淆:合并是否会运行预查询SQL?

  • 更新主索引后,立即更新增量索引以进行清理:

    indexer --rotate --config /opt/sphinx/etc/sphinx.conf delta
    
编辑:删除记录的工作原理如何?由于delta索引将包含已删除的记录,因此只有在将delta索引合并到main之后才会从搜索查询中删除记录?

2 个答案:

答案 0 :(得分:2)

要处理需要查看killlist的删除,它基本上定义了删除标准:

http://sphinxsearch.com/docs/manual-1.10.html#conf-sql-query-killlist

在一个例子中,我让我们每天早上构建我们的主要内容,然后每隔5分钟运行一次delta更新(包括killlist)。

关于合并的东西,我不确定,因为我从未使用它。

答案 1 :(得分:0)

这只是工作的一半。必须由kill list(现在称为kbatch)小心删除已删除的内容,然后delta将不会显示已删除的结果。但是,如果您合并-它们会重新出现。要解决此问题-您必须

indexer --merge main delta --merge-dst-range deleted 0 0 --rotate

但是,要使其正常工作-您需要将一个“已删除”属性添加到删除的每个结果中。然后合并过程将筛选出删除了= 1的结果,而主索引中将没有删除结果。