我有一个包含大约1亿条文档的索引。有时候我想检索所有文档,有时候我想按照特定字段进行分组,并选择每个唯一值的一个文档。类似于:
SELECT * FROM documents GROUP BY my_field;
举个例子,有时我想得到:
|id|my_field|thing |
|--|--------|-------|
|1 |a |red |
|2 |b |yellow |
|3 |b |green |
|4 |c |brown |
有时候
|id|my_field|thing |
|--|--------|-------|
|1 |a |red |
|3 |b |green |
|4 |c |brown |
ElasticSearch文档建议使用Terms Aggregation。然而,有人建议这仅适用于聚合术语的小基数,即“buckets”的数量较少:
此外,Top Hits aggregation返回的数据格式似乎不容易进行分页。有时唯一术语太多,无法在单个请求/响应对中处理,因此将分析分解为多个请求可能很有用。
例如,如果我有一百万个不同的术语,它看起来与预期设计不符。这是正确的吗?
我的替代方案是在自己的代码中维护索引并标记重复项,但这容易出错,容易受到并发问题等影响。
有没有一种方法可以实现我的需求,并发挥ElasticSearch的优势?