你的第二層的 nested obj 裡面,要先用 nested query 包起來,裡面再進行第二層內部的查詢,這時第二層也要用 bool ,就再裡面再做一次獨立的 bool + nested query 即可。
POST goods/_search
{
"query": {
"bool": {
"filter": [
{
"term": {
"saleable": true
}
},
{
"term": {
"valid": true
}
},
{
"nested": {
"path": "spu_spec",
"query": [
{
"term": {
"spu_spec.key": "cpu品牌"
}
},
{
"term": {
"spu_spec.value": "苹果"
}
}
]
}
},
{
"nested": {
"path": "spu_spec",
"query": [
{
"term": {
"spu_spec.key": "cpu核数"
}
},
{
"term": {
"spu_spec.value": "8核"
}
}
]
}
},
{
"nested": {
"path": "skus",
"query": {
"bool": {
"filter": [
{
"nested": {
"path": "skus.sku_spec",
"query": {
"term": {
"skus.sku_spec.search_key_value": "内存:8gb"
}
}
}
},
{
"nested": {
"path": "skus.sku_spec",
"query": {
"term": {
"skus.sku_spec.search_key_value": "机身存储:128gb"
}
}
}
}
]
}
}
}
}
]
}
},
"from": 0,
"size": 100,
"aggs": {
"fenmian_search": {
"nested": {
"path": "spu_spec"
},
"aggs": {
"fenmian_search": {
"terms": {
"field": "spu_spec.key"
},
"aggs": {
"value": {
"terms": {
"field": "spu_spec.value"
}
}
}
}
}
},
"part_search": {
"nested": {
"path": "skus"
},
"aggs": {
"part_search": {
"nested": {
"path": "sku_spec"
},
"aggs": {
"part_search": {
"terms": {
"field": "skus.sku_spec.key"
},
"aggs": {
"value": {
"terms": {
"field": "skus.sku_spec.value"
}
}
}
}
}
}
}
}
}
}