微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过 IP 前缀聚合 ElasticSearch 中的对象

如何解决通过 IP 前缀聚合 ElasticSearch 中的对象

我有一个 ElasticSearch 索引,用于存储互联网流量对象,其中每个对象都包含一个 IP 地址。我想以将具有相同 IP 前缀的所有对象收集在同一个存储桶中的方式聚合数据(但不指定特定的前缀)。类似于直方图聚合的东西。这可能吗?

我已经试过了:

function buildEmail() {
  window.initial = document.getElementById("initial").value;
  window.surname = document.getElementById("surname").value;
  window.email = initial + surname + "@[emaildomain.com]"
}

但这不起作用,可能是因为 ip 类型字段不支持直方图聚合。你会怎么做?

解决方法

首先,按照here的建议,最好的方法是:

在索引时对IP地址进行分类,然后使用一个简单的关键字字段来存储c类信息,然后在该字段上使用术语聚合进行计数。

或者,您可以简单地添加一个 multi-field keyword mapping

PUT myindex
{
  "mappings": {
    "properties": {
      "ipAddress": {
        "type": "ip","fields": {
          "keyword": {         <---
            "type": "keyword"
          }
        }
      }
    }
  }
}

然后在查询时提取前缀(⚠️效率极低!):

GET myindex/_search
{
  "size": 0,"aggs": {
    "my_prefixes": {
      "terms": {
        "script": "/\\./.split(doc['ipAddress.keyword'].value)[0]","size": 10
      }
    }
  }
}

作为最后一个选项,您可以提前定义感兴趣的区间并使用 ip_range aggregation

{
  "size": 0,"aggs": {
    "my_ip_ranges": {
      "ip_range": {
        "field": "ipAddress","ranges": [
          { "to": "192.168.1.1" },{ "from": "192.168.1.1" }
        ]
      }
    }
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。