我有一个ElasticSearch索引,我在其中存储互联网流量对象,每个对象都包含一个IP地址。我希望以一种方式聚合数据,即具有相同IP前缀的所有对象都收集在同一个存储桶中(但不指定特定的前缀)。类似于直方图聚合。这可能吗?
我试过这个:
GET flows/_search
{
"size": 0,
"aggs": {
"ip_ranges": {
"histogram": {
"field": "ipAddress",
"interval": 256
}
}
}
}
但这不起作用,可能是因为ip类型字段不支持直方图聚合。你会怎么做呢?
1条答案
按热度按时间pzfprimi1#
首先,正如here所建议的,最好的方法是:
在索引时对IP地址进行分类,然后使用一个简单的关键字字段来存储c类信息,然后在该字段上使用术语聚合来进行计数。
或者,您可以简单地添加multi-fieldkeyword mapping:
然后在查询时提取前缀(️效率极低!):
作为最后一个选项,您可以提前定义感兴趣的间隔并使用
ip_range
aggregation: