Solr DIH - 如何处理已删除的文件?

时间:2009-10-12 16:35:32

标签: lucene solr dataimporthandler

我正在使用Solr驱动的搜索我的webapp,我认为最好使用DataImportHandler来处理通过数据库与应用程序的同步。我喜欢只检查last_updated_date字段的优雅。好东西。但是,我不知道如何使用这种方法处理删除文档。我看到它的方式,我有两个选择。我可以在删除文档时从客户端向Solr发送显式消息,或者我可以添加“已删除”标志并将对象保留在数据库中,以便Solr注意到文档已更改并且现在已“删除” “。我可以添加一个查询过滤器来忽略带有已删除标志的结果,但是在Lucene索引中包含所有已删除的文档似乎效率低下。其他人做了什么?

2 个答案:

答案 0 :(得分:22)

以下是您的选择:

  • 使用DIH special commands $ deleteDocById或$ deleteDocByQuery(需要Solr 1.4 +)
  • 使用DIH的clean parameter删除整个索引,然后再导入。
  • 使用preImportDeleteQuery定义在导入之前要清理的内容。 (需要Solr 1.4 +)
  • 使用数据库触发器而不是DIH来管理更新索引。
  • 如果您正在使用某种ORM,请使用其拦截功能而不是DIH。例如,您可以使用hibernate events更新更新,插入或删除索引。

答案 1 :(得分:2)

我喜欢有一个“已删除”标志,所以我实际上并没有删除我的数据!取决于你是多么偏执。我喜欢毛里西奥的建议......