2010-07-12 43 views
3

我想知道是否有合适的方法来解决具有同步数据库记录的文档。我通常会遇到问题:有solr文档,而solr没有提供数据库记录。似乎有些db记录已被删除,但没有触发器更新solr。我想编写一个rake任务来删除定期运行的solr中的文档。与数据库记录同步解决方案文档

有什么建议吗?

Chamnap我使用Java + Java的DB + Lucene的(其中的Solr是根据)对我的文本搜索和数据库记录

+0

请参阅http://stackoverflow.com/questions/1555610/solr-dih-how-to-handle-deleted-documents – 2010-07-12 13:08:07

回答

4

是的,有一个。

您必须使用具有增量导入功能的DataImportHandler

基本上,您指定的查询只更新已修改的行,而不是重建整个索引。这是一个example

否则,您可以在您的应用程序中添加一个功能,只需在数据库和索引中触发通过HTTP删除文档即可。

0

。我的解决方案是备份然后重新创建(删除+创建)Lucene数据库以与我的Java DB记录同步。这似乎是最简单的方法,唯一的问题是这不是经常运行的建议。这也意味着您的记录不会实时更新。我每晚都会运行批处理作业,以便所有更改都能在第二天反映出来。希望这可以帮助。

另请阅读有关在“无同步”下同步Solr和db记录here的文章。它指出这并不容易,但在某些情况下可能。如果你指定你的编程语言,以便更多的人可以帮助你,那将会很有帮助。

+0

从我的数据库中生成完整索引需要相当长的时间。我不能每晚都做,因为这需要一天多的时间。 – Chamnap 2010-07-12 07:45:25

+0

我看到,对于Java,在http://www.mail-archive.com/[email protected]/msg24663.html和http://wiki.apache.org/solr/DataImportHandler中找到了一些参考文献,对于Ruby on Rails,http://coderkitty.sweetperceptions.com/2009/3/27/removing-out-of-sync-error-in-acts_as_solr – Manny 2010-07-12 08:12:11

0

除上述之外,通过设置deleteddeleted_at列来“软”删除是一种很好的方法。这样,您可以运行脚本来根据需要定期清除Solr索引中已删除的记录。

您提到使用rake任务 - 这是您正在使用的Rails应用程序吗?大多数Solr客户端的Rails应用程序应支持通过after_destroy挂钩删除记录。

+0

是的,我在rails中使用activemessaging gem,但是我不能处理轮询脚本非常好。 – Chamnap 2010-07-13 03:56:30