kibana数据表嵌套对象计数

pbossiut  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(315)

我正在使用kibana版本6.5.1。
我的文档如下所示:
第一

{
"id": 12345,
"source": "Github",
"creation_date": "2020-10-14"
"files": [
 {
    "file_id": 444,
    "file_name": "test.png",
    "file_type": "png"
    },
    {
    "file_id": 445,
    "file_name": "test2.pdf",
    "file_type": "pdf"
    },
    {
    "file_id": 446,
    "file_name": "test3.pdf",
    "file_type": "pdf"
  }
]
}

第二

{
"id": 12346,
"source": "stackoverflow",
"creation_date": "2020-10-14"
"files": [
 {
    "file_id": 447,
    "file_name": "example.pdf",
    "file_type": "pdf"
    },
    {
    "file_id": 448,
    "file_name": "anotherOne.pdf",
    "file_type": "pdf"
  }
]
}

等等。
我想创建如下所示的数据表:

file_type | count
------------------
png       | 1
pdf       | 4

所以在左边我们可以看到files.file类型,在右边是所有文档中每个文件的计数。
我尝试设置files.file\u id的唯一计数和字段files.file\u type.keyword聚合的拆分行的度量
但我得到这张table:

file_type | count
------------------
png       | 3
pdf       | 5

它看起来像一个文档,如果在嵌套的“files”字段中至少有一个与文件类型匹配的文件,那么它会计算一个文档中的所有文件。
我怎么能让它看起来像第一张table?度量的json输入会有帮助吗?

g9icjywg

g9icjywg1#

必须将“files”字段Map为嵌套的数据类型才能使其工作。然后使用嵌套聚合。
示例数据:
Map:

PUT test/_mapping
{
  "properties": {
    "files": {
      "type": "nested"
    }
  }
}

查询:

GET test/_search?filter_path=aggregations
{
  "size": 0, 
  "aggs": {
    "files_nested": {
      "nested": {
        "path": "files"
      },
      "aggs": {
        "files_type": { "terms": { "field": "files.file_type.keyword" } }
      }
    }
  }
}

答案是:

{
  "aggregations" : {
    "files_nested" : {
      "doc_count" : 5,
      "files_type" : {
        "doc_count_error_upper_bound" : 0,
        "sum_other_doc_count" : 0,
        "buckets" : [
          {
            "key" : "pdf",
            "doc_count" : 4
          },
          {
            "key" : "png",
            "doc_count" : 1
          }
        ]
      }
    }
  }
}

相关问题