elastic search 里存在对象如下:Sku CarSpecs SkuCarSpecs里的对象结构是IdValue现在传入参数qq是个Arrayq里面的对象结构是IdValue如下:要求SkuCarSpecs里的每一个元素必须都能在参数q里找到Id和Value相同的元素怎么写查询?
可以使用nested查询来实现:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "Sku.CarSpecs",
"query": {
"bool": {
"must": [
{"match": {"Sku.CarSpecs.Id": q[0].Id}},
{"match": {"Sku.CarSpecs.Value": q[0].Value}}
]
}
}
}
},
{
"nested": {
"path": "Sku.CarSpecs",
"query": {
"bool": {
"must": [
{"match": {"Sku.CarSpecs.Id": q[1].Id}},
{"match": {"Sku.CarSpecs.Value": q[1].Value}}
]
}
}
}
},
// 继续添加q中的元素
// ...
]
}
}
}
以上查询会查找所有满足条件的文档,其中每个文档的Sku.CarSpecs数组中都包含参数q中的所有元素。如果想要查找Sku.CarSpecs数组中至少包含参数q中的一个元素,可以将bool查询的must改为should
原文地址: https://www.cveoy.top/t/topic/dJt5 著作权归作者所有。请勿转载和采集!