2011-02-06 125 views
0

我在我的Java应用程序中使用Sphinx(v。0.99)。 我还将其与rails应用程序中的thinking_sphinx插件一起使用。如何避免在没有完全重新索引的情况下导致狮身人面像索引失效?

对于Java应用程序,我试图使用增量索引 - 我主要从现有的导轨配置和应用程序行为中找出它。

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

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

到目前为止,这一切与我的rails应用程序相同 - 如果我使用搜索命令进行检查,rails应用程序也会在主索引中显示一个陈旧的副本。然而,如果我通过我的rails应用程序搜索,我不会再看到那个陈旧的记录(即使命令行搜索显示它仍然存在)。 但是,如果我通过我的Java应用程序进行搜索,我仍会在结果中看到过时的记录。

我猜不知道think_sphinx插件是以某种方式处理这个问题,或者我在某处有一些配置项输入错误。

我已经通过thinking_sphinx源码看看它是否以某种特殊的方式处理这个问题,但我没有看到任何明显的东西。

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

我的(Java)sphinx配置是here

回答

2

我不是thinking_sphinx或Java的专家,但是如果您希望重复文档从索引的主要部分消失,您可以使用Sphinx杀戮列表(http://sphinxsearch.com/docs/current.html#conf-sql-query-killlist)。这是专为像你这样的案例发明的。 希望它会有所帮助。

+0

这已经很好地解决了我的问题,非常感谢。 – 2011-02-06 19:11:44

相关问题