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