【问题标题】:Terms aggregation on first three octets of IPIP 前三个八位字节的术语聚合
【发布时间】:2016-08-10 14:00:18
【问题描述】:

我正在做一个分面搜索 UI,我要添加的分面之一是 IP 字段的前三个八位字节。

因此,例如,给定 IP 为“192.168.1.1”、“192.168.1.2”、“192.168.2.1”的文档,我想显示构面“192.168.1 (2)”和“192.168.2”( 1)"。

我可以为此使用聚合吗?据我所知,范围聚合需要我预先定义范围,而术语聚合只需要一个字段。

显然,另一种选择是将前三个八位字节索引为单独的字段,但我当然希望避免这种情况。

谢谢!

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您可以添加分隔符为“.”的路径层次标记器以及一个自定义分析器,其分词器设置为您刚刚制作的分词器。

    语法见这个问题:

    Elasticsearch - using the path hierarchy tokenizer to access different level of categories

    然后你可以聚合术语,你会得到按每个数字组分组的结果

    {
        "key": "192",
        "doc_count": 10
    },
    {
        "key": "192.168",
        "doc_count": 10
    },
    ...
    

    在链接的答案中,有一种方法可以排除某些聚合级别。以下应排除所有结果,但具有 3 级数字的结果除外。

    "aggs": {
        "ipaddr": {
            "terms": {
                "field": "your_ip_addr",
                "exclude": ".*",
                "include": ".*\\..*\\..*"
         }
    }
    

    https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pathhierarchy-tokenizer.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-17
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多