我想知道有一种正确的方法可以使用同步数据库记录来处理文档。我经常遇到问题:有solr文件,而solr没有数据库记录。似乎某些db记录已被删除,但没有触发更新solr。我想编写一个rake任务来删除定期运行的solr中的文档。
有什么建议吗?
Chamnap
答案 0 :(得分:6)
是的,有一个。
您必须将DataImportHandler与delta导入功能配合使用。
基本上,您指定的查询仅更新已修改的行,而不是重建整个索引。这是一个example。
否则,您可以在应用程序中添加一个功能,只需在数据库和索引中通过HTTP触发删除文档。
答案 1 :(得分:0)
我正在使用Java + Java DB + Lucene(Solr所基于的)来处理我的文本搜索和数据库记录。我的解决方案是备份然后重新创建(删除+创建)Lucene数据库以与我在Java DB上的记录同步。这似乎是最简单的方法,唯一的问题是不建议经常运行。这也意味着您的记录不会实时更新。我每晚都会运行我的批处理工作,以便所有更改都反映在第二天。希望这会有所帮助。
另请阅读有关在“无同步”下同步Solr和db记录here的文章。它说这不容易,但在某些情况下可能。如果您指定编程语言会更有帮助,那将会很有帮助。
答案 2 :(得分:0)
除上述内容外,通过设置deleted
或deleted_at
列进行“软”删除是一种很好的方法。这样,您可以根据需要运行脚本定期从Solr索引中清除已删除的记录。
你提到使用rake任务 - 这是你正在使用的Rails应用程序吗? Rails应用程序的大多数Solr客户端都应支持通过after_destroy
挂钩删除记录。