我正在尝试获取有关Elasticsearch中聚合的信息。
我有一个索引,我存储邮件元数据(发件人IP,主题等)。我想要做的是我想获得发送超过1000封邮件的IP数量。 (例如,假设我们有3个IP地址,2000个邮件来自第一个IP ,1500个来自第二个,200个来自第三个IP 然后我想看到 2 作为聚合结果。)我写了以下查询:
GET /my_index/_search
{
"size": 0,
"aggs": {
"ipAddresses": {
"terms": {
"field": "senderIpAddress",
"min_doc_count": 1000,
"size" : 0
}
}
}
}
我可以在我的后端实现中获取存储桶并计算其大小,但是我需要获取存储桶中的所有数据才能执行此操作。它很慢,我想获得桶大小而不获取所有数据。
TL; DR,如何在不检索整个数据的情况下获得聚合桶的总大小?
答案 0 :(得分:0)
这是cardinality聚合的目的:
{
"size": 0,
"aggs": {
"ipAddressesCount": {
"cardinality": {
"field": "senderIpAddress"
}
}
}
}
请注意,这是一个近似值 - 可以使用precision_threshold
配置精度,如上面链接中所述。