【发布时间】:2020-09-04 05:11:33
【问题描述】:
希望大家都平安!
我正在尝试探索在 elasticsearch 中处理以下用例的正确方法
假设我有大约 700000 个文档,我想根据一个字段(我们称之为 primary_id)存储这些文档。对于多个文档,此主 ID 可以相同(通常最多 2-3 个文档将具有相同的 primary_id)。在所有其他情况下,primary_id 不会在任何其他文档中重复。
因此,平均每 10 个文档我将有 8 个唯一的主 ID,并且 2 个文档中的 1 个主 ID 相同
为了确保唯一性,我尝试使用术语聚合,但最终我得到了响应我的搜索请求的存储桶,但没有用于后续的滚动请求。谷歌搜索后,我发现滚动查询不支持聚合。
因此,我尝试寻找替代解决方案,并尝试了此链接中的解决方案,https://lukasmestan.com/learn-how-to-use-scroll-elasticsearch-aggregation/
它建议使用多个搜索请求,每个请求都指定要获取的分区号(取决于您将结果划分到多少个分区)。但是即使客户端设置了高超时设置,我也会收到客户端超时。
理想情况下,我想知道处理此类数据的最佳方法是什么,其中形成存储桶的字段的方差几乎等于文档的数量。 SQL 等效项是 select DISTINCT (primary_id) from .....
但在 elasticsearch 中,不同的事物只能通过分桶(术语聚合)来处理。
我还使用热门匹配作为术语聚合下的子聚合查询来获取 _source 字段。
任何帮助将不胜感激!
谢谢!
【问题讨论】: