【发布时间】:2014-12-13 04:51:25
【问题描述】:
我们的 ElasticSearch 实例中有大约 55.000.000 个文档。我们有一个带有 user_ids 的 CSV 文件,最大的 CSV 有 9M 条目。我们的文档以 user_id 作为 key,所以这很方便。
我发布此问题是因为我想讨论并拥有完成此问题的最佳选择,因为有不同的方法可以解决此问题。如果用户文档还没有它,我们需要将新的“标签”添加到文档中,例如用“stackoverflow”或“github”标记用户。
- 有经典的partial
update端点。这听起来很慢,因为我们需要迭代超过 9M 的 user_id 并为每个用户发出 api 调用。 - 有
bulkrequest,它提供了一些更好的性能,但一次调用中可以提及的文档数量有限,只有 1000-5000 个。知道批次何时过大有点知道我们需要如何在旅途中学习。 - 然后是official open issue for
/update_by_query端点,它有大量流量,但没有确认它在标准版本中实现。 - 在这个未解决的问题上,提到了update_by_query plugin,它应该可以提供更好的处理,但存在一些旧的和未解决的问题,用户抱怨性能问题和内存问题。
- 我不确定它在 EL 上是否可行,但我想我会将所有 CSV 条目加载到一个单独的索引中,并且会以某种方式加入两个索引并应用脚本,如果不存在则添加标签。
所以问题仍然是最好的方法是什么,如果你们中的一些人过去这样做过,请确保分享你的数字/表现以及这次你将如何做不同的事情。
【问题讨论】:
-
有趣的问题;我会选择选项#2 与选项#5 混合;每个请求 1k 的文档是好的;在添加新标签之前,我还将通过 user_id 为空创建一个 55M 唯一文档,然后更新文档
标签: search elasticsearch