按Bucket键值过滤Elasticsearch聚合

问题描述 投票:1回答:1

我有一个Elasticsearch文档索引,其中有一个包含URL列表的字段。在此字段上聚合可以按预期方式为我提供唯一URL的计数。

GET models*/_search
{
  "query": {
    "match_all": {}
  },
  "size": 0,
  "aggs": {
    "links": {
      "terms": {
        "field": "links.keyword",
        "size": 10
      }
    }
  }
}

然后我想过滤掉其键不包含某个字符串的桶。我试过用Bucket Selector Aggregation这样做。

这个尝试:

GET models*/_search
{
  "query": {
    "match_all": {}
  },
  "size": 0,
  "aggs": {
    "links": {
      "terms": {
        "field": "links.keyword",
        "size": 10
      }
    },
    "links_key_filter": {
      "bucket_selector": {
        "buckets_path": {
          "key": "links"
        },
        "script": "!key.contains('foo')"
      }
    }
  }
}

失败:

名为[bucket_selector]的[queue_key_filter]的无效管道聚合。顶层只允许兄弟管道聚合

将存储桶选择器放在链接聚合中,如下所示:

GET models*/_search
{
  "query": {
    "match_all": {}
  },
  "size": 0,
  "aggs": {
    "links": {
      "terms": {
        "field": "links.keyword",
        "size": 10
      },
      "bucket_selector": {
        "buckets_path": {
          "key": "links"
        },
        "script": "!key.contains('foo')"
      }
    }
  }
}

失败了:

在[links]中找到两个聚合类型定义:[terms]和[bucket_selector]

我要继续修补,但此刻有点卡住:(

elasticsearch key-value aggregation bucket
1个回答
0
投票

您可以使用“_key”来获取密钥:

GET models*/_search
{
  "query": {
    "match_all": {}
  },
  "size": 0,
  "aggs": {
    "links": {
      "terms": {
        "field": "links.keyword",
        "size": 10
      },
      "bucket_selector": {
        "buckets_path": {
          "key": "_key"
        },
        "script": "!params.key.contains('foo')"
      }
    }
  }
}

-1
投票
GET models*/_search
{
  "query": {
    "match_all": {}
  },
  "size": 0,
  "aggs": {
    "links": {
      "terms": {
        "field": "links.keyword",
        "size": 10
      }

    },
      "bucket_selector": {
        "buckets_path": {
          "key": "links"
        },
        "script": "!key.contains('foo')"
      }
  }
}

您的选择器应该升级,它应该直接在aggs中并与选择器组并行。我不确定密钥过滤

© www.soinside.com 2019 - 2024. All rights reserved.