3

我们手头有以下问题。我们希望在此过程中以 100% 的读取可用性进行完整的重新索引。从索引中删除旧文档时会出现问题。目前我们正在做某事。像这样:

1) fetch all data from db and update solr index per solrServer.add()
2) get all document ids that were updated and compare them with all the document ids in index
3) delete all documents that are in index but weren´t updated

这似乎可行,但对于这项任务是否有更好/更简单的解决方案?

4

2 回答 2

2

在您提交之前,这些更改不会变得可见。因此,您可以发出删除命令,然后为所有文档编制索引。只要确保不存在自动提交即可。这显然需要更多的内存。

或者,您可以使用世代标记(例如,增加 ID 或时间戳)创建一个单独的字段。然后,您发出查询删除以使用老一代拾取剩余的文档。

最后,您可以索引到一个新的核心/集合,然后换出活动集合以指向新的集合。然后,您可以删除旧的集合目录。

于 2013-09-19T01:35:40.553 回答
0

听起来您可能对删除有性能问题。如果你这样做:

删除 id:12345 删除 id:23456 删除 id:13254

那么它比这慢得多:

删除 id:(12345 OR 23456 OR 13254)

收集需要删除的 id 列表,以 100 个左右为一组进行批处理,然后使用括号和 OR 将这些批处理转换为删除查询。我已经通过数以千计的批量删除来完成此操作,它比一次执行一个要快得多。

于 2013-09-18T16:10:35.253 回答