模拟一种数据存储场景,一个人有多辆车,需要将人和车的信息保存在一起
创建索引:
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"
}
}
}
}
}
}
}
}
}
}