【问题标题】:Terms aggregation on multiple fields in ElasticsearchElasticsearch 中多个字段的术语聚合
【发布时间】:2018-10-18 10:38:39
【问题描述】:

我正在尝试从 Elasticsearch 中获取一些数据。我有一个问题:

GET index/_search
{
  "aggs": {
    "first-metadata": {
      "terms": {
        "field": "filters.metadata.first-metadata"
      }
    }
  }
}

作为回应,我得到了类似的结果:

"aggregations": {
  "first-metadata": {
    "buckets": [
      {
        "key": 87000,
        "doc_count": 2
      },
      {
        "key": 100000,
        "doc_count": 1
      }
    ]
  }
}

一切都如我所料。但问题是我有多种元数据类型:first-metadatasecond-metadatathird-metadata,我想要这样的东西:

"aggregations": {
  "first-metadata": {
    "buckets": [
      {
        "key": 87000,
        "doc_count": 2
      },
      {
        "key": 100000,
        "doc_count": 1
      }
    ]
  },
  "second-metadata": {
    "buckets": [
      {
        "key": 5555,
        "doc_count": 24
      },
      {
        "key": 2222,
        "doc_count": 14
      },
      {
        "key": 3333,
        "doc_count": 7
      }
    ]
  },
  "third-metadata": {
    "buckets": [
      {
        "key": 7777,
        "doc_count": 23
      },
      {
        "key": 3333,
        "doc_count": 11
      }
    ]
  }
}

有没有办法在一个聚合查询中实现这样的结果?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    很简单

    POST index/_search
    {
      "aggs": {
        "first-metadata": {
          "terms": {
            "field": "filters.metadata.first-metadata"
          }
        },
        "second-metadata": {
          "terms": {
            "field": "filters.metadata.second-metadata"
          }
        }
    
      }
    }
    

    【讨论】:

    • 确实这很简单 :) 谢谢。但我有一个更困难的案例。如果有成千上万的元数据怎么办?我需要为每个字段重复数千次吗?或者其他情况:元数据名称是自动生成的,我想获得所有这些的术语聚合。我可以使用通配符 (filters.metadata.*) 或其他方式吗?
    • 有可能。在这里stackoverflow.com/questions/48413369/… 使用 map-reduce 实现检查我的答案@它会让你知道你能做什么。如果您需要更多详细信息或有任何疑问,请随时填写。
    猜你喜欢
    • 2014-05-12
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 2014-07-09
    • 2016-01-22
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多