07_ES嵌套数据类型

模拟一种数据存储场景,一个人有多辆车,需要将人和车的信息保存在一起

创建索引:

PUT /test_car_index_2
{
  "mappings": {
    "properties": {
      "username":{
        "type": "keyword"
      },
      "cars":{
        "type": "nested", 
        "properties": {
          "car_name":{
            "type":"keyword"
          },
          "car_price":{
            "type":"half_float"
          }
        }
      }
    }
  }
}

插入测试数据

POST /test_car_index_2/_doc
{
  "username": "username_1",
  "cars": [
    {
      "car_name": "car_name_1",
      "car_price": 1
    },
    {
      "car_name": "car_name_11",
      "car_price": 11
    }
  ]
}
POST /test_car_index_2/_doc
{
  "username": "username_2",
  "cars": [
    {
      "car_name": "car_name_2",
      "car_price": 2
    },
    {
      "car_name": "car_name_22",
      "car_price": 22
    }
  ]
}

嵌套查询(根据username和car_name进行过滤):

GET /test_car_index_2/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "username": "username_1"
          }
        },
        {
          "nested": {
            "path": "cars",
            "query": {
              "bool": {
                "filter": [
                  {
                    "term": {
                      "cars.car_name": "car_name_1"
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

聚合查询:根据username和car_name进行分组,对car_price求和

GET /test_car_index_2/_search
{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size": 0,
  "aggs": {
    "group_by": {
      "composite": {
        "sources": [
          {
            "group_by_username": {
              "terms": {
                "field": "username"
              }
            }
          }
        ]
      },
      "aggs": {
        "group_by_nested": {
          "nested": {
            "path": "cars"
          },
          "aggs": {
            "group_by_car_name": {
              "terms": {
                "field": "cars.car_name"
              },
              "aggs": {
                "sum_car_price": {
                  "sum": {
                    "field": "cars.car_price"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值