列出出现在多个文档中的字段值ElasticSearch

nimxete2  于 2022-12-22  发布在  ElasticSearch
关注(0)|答案(1)|浏览(96)

我有一个ElasticSearch数据库,其中的文档包含serviceName和documentId字段,如下所示:
文件一:

{
"serviceName": 2020,
"documentId": 1
}

文件二:

{
"serviceName": 2020,
"documentId": 2
}

文件三:

{
"serviceName": 2019,
"documentId": 1
}

我需要列出每个documentId值的所有serviceName值。因此,答案如下:
2019年1月20日
二○二○年
这可以在ElasticSearch中完成吗?

tnkciper

tnkciper1#

您可以使用Elasticsearch中的terms aggregation来获得预期结果。
下面是示例查询:

POST 74854188/_search
{
  "size": 0,
  "aggs": {
    "ID": {
      "terms": {
        "field": "documentId",
        "size": 10
      },
      "aggs": {
        "ServiceName": {
          "terms": {
            "field": "serviceName",
            "size": 10
          }
        }
      }
    }
  }
}

所给示例数据的输出:

"aggregations": {
    "ID": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": 1,
          "doc_count": 2,
          "ServiceName": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
              {
                "key": 2019,
                "doc_count": 1
              },
              {
                "key": 2020,
                "doc_count": 1
              }
            ]
          }
        },
        {
          "key": 2,
          "doc_count": 1,
          "ServiceName": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
              {
                "key": 2020,
                "doc_count": 1
              }
            ]
          }
        }
      ]
    }
  }

如果您已使用textkeyword这两种类型定义字段,则需要使用documentId.keywordserviceName.keyword,如果字段定义为long,则上述查询按原样工作。

相关问题