我正在尝试嵌套聚合并在其上应用过滤器。
请参阅以下示例:
汽车
功能
以下是一些测试数据:
car_A:
{
brand :"VW",
name: "Golf",
features: [
{name: "color", value: "black"},
{name: "power", value: "150"}
]
}
car_B:
{
brand :"VW",
name: "Golf",
features: [
{name: "color", value: "blue"},
{name: "power", value: "150"}
]
}
car_C:
{
brand :"VW",
name: "Golf",
features: [
{name: "color", value: "white"},
{name: "power", value: "150"}
]
}
car_D:
{
brand :"BMW",
name: "X3",
features: [
{name: "color", value: "white"},
{name: "power", value: "180"}
]
}
car_E:
{
brand :"BMW",
name: "X5",
features: [
{name: "color", value: "blue"},
{name: "power", value: "250"}
]
}
car_F:
{
brand :"BMW",
name: "X3",
features: [
{name: "color", value: "blue"},
{name: "power", value: "150"}
]
}
这是查询:
"query": {
"nested": {
"path": "features",
"query": {
"bool": {
"should": [
{
"match": {
"features.color": "blue"
}
},
{
"match": {
"features.color": "white"
}
}
],
"must": [
{"match": {
"features.power": 150
}}
]
}
}
}
}
查询结果为A,B,C,F
预期结果应为B,C,F(颜色=蓝色 OR 颜色=白色) AND 功率= 150
答案 0 :(得分:2)
尝试此查询:
"query": {
"nested": {
"path": "features",
"query": {
"bool": {
"should": [
{
"match": {
"features.color": "blue"
}
},
{
"match": {
"features.color": "white"
}
}
],
"must": [
{"match": {
"features.power": 150
}}
]
}
}
}
}
意思是,您在查询中使用的字段应以path
的名称为前缀:features.color
,features.power
。
修改强>:
尝试此查询(我在此错过了必要的内容 - 您需要两个must
,一个是bool
should
s):
{
"query": {
"nested": {
"path": "features",
"query": {
"bool": {
"must": [
{
"match": {
"features.power": 150
}
},
{
"bool": {
"should": [
{
"match": {
"features.color": "blue"
}
},
{
"match": {
"features.color": "white"
}
}
]
}
}
]
}
}
}
}
}