如何在kibana中使用嵌套数据

How to use nested data in kibana

我正在尝试研究如何将本质上是关系数据的数据转换为用于 kibana 搜索/可视化的文档格式。

我想我需要我的文档看起来像这样:

{
    "order": {
        "id": 123,
        "customer": "bob",
        "email": "robert@bob.com",
        "items": [{
                "id": "xyz",
                "price": 12.2
            }, {
                "id": "abc",
                "price": 13.1
            },
            {
                "id": "abc",
                "price": 13.1
            }
        ]
    }
}

我不知道每个订单有多少商品,因此需要它是某种嵌套文档结构。

我可以愉快地将这一切都放入Elastic并将我的类型设置为嵌套。

但我不知道如何在 Kibana 中回答以下问题:

  1. 订单中商品的总价是多少(38.4)

  2. 所有项目的总和是多少(xyz=1,abc=2)

我已经尝试查看各种博客、SO 问题等,但没有找到我需要的东西,这意味着我可能在考虑这个问题。

我能想出的唯一答案是我试图避免的是我的文档需要在发送问题时计算问题的答案,以便可以将它们作为标准字段进行搜索。

关于我应该阅读的内容有什么建议吗?

提前致谢!

下面的(很长的)汇总应该可以回答您的两个问题:

{
  "size": 0,
  "aggs": {
    "nested_items": {
      "nested": {
        "path": "items"
      },
      "aggs": {
        "group_by_document": {
          "terms": {
            "field": "_id"
          },
          "aggs": {
            "group_by_item_id": {
              "terms": {
                "field": "items.id"
              },
              "aggs": {
                "total_price_by_item_id": {
                  "sum": {
                    "field": "items.price"
                  }
                }
              }
            },
            "total_price_by_document": {
              "sum_bucket": {
                "buckets_path": "group_by_item_id>total_price"
              }
            }
          }
        }
      }
    }
  }
}

通俗地说:

  1. nested_items 启用聚合嵌套的 items 字段(参见 nested aggregations
  2. group_by_document,好吧,使用 _id 字段
  3. 按文档分组
  4. group_by_item_id 按 id
  5. items 进行分组
  6. total_price_by_item_id 对给定items.id 某文档
  7. 的所有商品的价格求和
  8. total_price_by_document 通过 items.id 对价格总和求和(参见 pipeline aggregations