Search 如何更新Sphinx主索引和增量索引

Search 如何更新Sphinx主索引和增量索引,search,full-text-search,sphinx,Search,Full Text Search,Sphinx,我已经阅读了Sphinx文档和各种资源,但是我对维护主索引和增量索引的过程感到困惑。请让我知道这是否正确: 有一个表,该表按上次更新时间对搜索索引进行分区(与教程中的id不同) 每15分钟更新一次增量索引。增量索引仅获取上次更新时间已更新的记录: indexer --rotate --config /opt/sphinx/etc/sphinx.conf delta 通过使用以下各项合并增量,每小时更新一次主索引: indexer --merge main delta --merge-dst

我已经阅读了Sphinx文档和各种资源,但是我对维护主索引和增量索引的过程感到困惑。请让我知道这是否正确:

  • 有一个表,该表按上次更新时间对搜索索引进行分区(与教程中的id不同)

  • 每15分钟更新一次增量索引。增量索引仅获取上次更新时间已更新的记录:

    indexer --rotate --config /opt/sphinx/etc/sphinx.conf delta
    
  • 通过使用以下各项合并增量,每小时更新一次主索引:

    indexer --merge main delta --merge-dst-range deleted 0 0 --rotate
    
预查询SQL将
上次更新时间
更新为
NOW()
,这将重新划分索引

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

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

    indexer --rotate --config /opt/sphinx/etc/sphinx.conf delta
    

编辑:删除记录如何工作?由于增量索引将包含已删除的记录,因此只有在增量索引合并到主索引后,才会从搜索查询中删除记录?

要处理删除操作,您需要查看killlist,它基本上定义了删除条件:

在一个例子中,我们构建了我们的主每日,清晨只需每5分钟运行一次增量更新(包括killlist)


关于合并功能,我不确定,因为我从未使用过它。

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

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

但为了使其正常工作,您需要在每个被删除的结果中添加一个属性“deleted”。然后,合并过程将筛选出已删除=1的结果,并且主索引中不会包含已删除的结果。

有没有办法在Sphinx中实时删除文档?或者您总是必须等待增量索引重建吗?一个常见的用例是用户想要删除他发布的内容。在sphinx 1.10-beta中,有一个实时索引的想法,可以对其执行类似sql的语句(update/delete/insert)。如果你使用的是标准索引,那么我不这么认为。