Elasticsearch 查询Sku.CarSpecs数组中包含所有参数元素
Elasticsearch 查询Sku.CarSpecs数组中包含所有参数元素
假设Elasticsearch索引中存在以下结构的文档:
Sku: {
CarSpecs: []
}
其中Sku.CarSpecs是一个数组,数组中的每个元素都是一个包含Id和Value的对象:
{Id, Value}
现在传入一个参数q,q也是一个数组,数组中每个元素也是一个包含Id和Value的对象:
{Id, Value}
目标: 查询所有Sku.CarSpecs数组中包含所有参数q中元素的文档。
解决方案: 可以使用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/k6s2 著作权归作者所有。请勿转载和采集!