Php 将文档添加到Sphinx索引并在不完全重建的情况下修改其属性

Php 将文档添加到Sphinx索引并在不完全重建的情况下修改其属性,php,indexing,sphinx,Php,Indexing,Sphinx,我有一个基于Wordpress的网站,它使用Sphinx作为搜索引擎,通过访问该网站的MySQL数据库,每N小时就有一个cron任务来重建Sphinx索引。这可以很好地工作,除非是在创建或编辑帖子时——在这种情况下,在重建索引之前,它将保持未索引或使用过时属性索引 根据Sphinx PHP API,只允许更新已编制索引的文档,显然,如果不从头开始重建文档或与增量文档合并,就无法将新文档添加到索引中。也无法从索引中删除文档 此外,查看UpdateAttributes源代码可以发现,只允许更新数值属

我有一个基于Wordpress的网站,它使用Sphinx作为搜索引擎,通过访问该网站的MySQL数据库,每N小时就有一个cron任务来重建Sphinx索引。这可以很好地工作,除非是在创建或编辑帖子时——在这种情况下,在重建索引之前,它将保持未索引或使用过时属性索引

根据Sphinx PHP API,只允许更新已编制索引的文档,显然,如果不从头开始重建文档或与增量文档合并,就无法将新文档添加到索引中。也无法从索引中删除文档

此外,查看UpdateAttributes源代码可以发现,只允许更新数值属性(其他类型通过断言过滤掉)。这让我觉得Sphinx开发人员并不真正欢迎动态更新索引

是否有任何方法可以解决这个问题,不仅可以按计划修改所有文档的索引,还可以按需修改特定文档的索引?或者Sphinx是一种不好的做法,即使只有一个文档需要更新,使用频繁更新的增量索引合并主索引也是一种可以接受的解决方案


提前感谢。

您可以尝试Sphinx real-time indexes()向现有索引添加一个文档,而无需重建整个索引。

很有趣,谢谢。但据我所知,我可以使用RT索引添加新文档,而不是修改已经索引的文档。即使在RT索引中,也只支持INSERT和DELETE,而不支持UPDATE(尽管我认为我可以删除旧记录并插入新记录进行修改)。但我主要关心的是磁盘索引中的旧文档以及它们的修改。我可以用RT条目“覆盖”它们吗?如果RT index中的一个文档具有相同的ID,它将替换磁盘中的一个文档,还是在合并筛选器后它们都将出现在搜索结果中?您可以使用replace或DELETE+INSERT。无论哪种方式,新文档都将覆盖旧文档。