如何在没有完全重新索引的情况下避免过时的sphinx索引?

时间:2011-02-06 13:26:31

标签: java sphinx

我在Java应用程序中使用Sphinx(v。0.99)。 我还将它与rails应用程序上的thinking_sphinx插件一起使用。

对于我正在尝试使用delta索引的Java应用程序 - 我主要是从现有的rails配置和应用程序行为中找出它。

我在搜索的模型对象上有一个名为'delta'的布尔字段。 每当我更新或创建记录时,我都将delta字段设置为true 我已经确认我的sphinx配置中的delta和main索引查询会根据该delta字段获取正确的记录 此外,每当更新或插入时,我的代码都会触发delta重新索引(我从不删除数据)。

更新记录后,它会正确显示在增量索引中,但当然过时的版本仍然在主索引中。 我可以通过手动运行'search'命令来看到这一点。

到目前为止,这一切都与我的rails应用程序相同 - 如果我使用搜索命令检查,rails应用程序也会在主索引中显示一个陈旧的副本。

然而,如果我通过我的rails应用程序搜索,我不再看到那个陈旧的记录(即使命令行搜索显示它仍然存在)。 但是,如果我通过我的Java应用程序搜索,我仍然会在结果中看到这个陈旧的记录。

我猜想think_sphinx插件会以某种方式处理这个问题,或者某些配置输入错误。

我一直在使用thinking_sphinx源代码来查看它是否以某种特殊的方式处理它,但我没有看到任何明显的东西。

理想情况下,我希望在我的Java应用程序中使用相同的行为。

我的(Java)sphinx配置是here

1 个答案:

答案 0 :(得分:2)

我不是think_sphinx或Java的专家,但是如果你想从索引的主要部分中删除重复的文档,你可以使用Sphinx kill-list(http://sphinxsearch.com/docs/current.html#conf-sql-query-killlist)。这是为像你这样的案件发明的。 希望它会有所帮助。