16

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

4

2 回答 2

22

这些是您的选择:

  • 使用DIH 特殊命令$deleteDocById 或 $deleteDocByQuery(需要 Solr 1.4+)
  • 导入前使用 DIH 的clean 参数删除整个索引。
  • 使用preImportDeleteQuery定义导入前要清理的内容。(需要 Solr 1.4+)
  • 使用数据库触发器而不是 DIH 来管理更新索引。
  • 如果您使用某种 ORM,请使用其拦截功能而不是 DIH。例如,您可以使用休眠事件在更新、插入或删除时更新索引。
于 2009-10-13T00:07:34.800 回答
2

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

于 2009-10-13T18:34:48.633 回答