我希望你能帮助我找到解决方案,我的问题是: 我的索引中有一个文档列表,例如
{
"title" : "document 1",
"status" 2,
"documentParts" : [{ "partTitle": "part 1",
"typePart" : 1,
"statusPart" : 2},
{ "partTitle": "part 2",
"typePart" : 2,
"statusPart" : 1}]
},
{
"title" : "document 2",
"status" 2,
"documentParts" : [{ "partTitle": "part 2",
"typePart" : 2,
"statusPart" : 2}]
},
{
"title" : "document 3",
"status" 2,
"documentParts" : [{ "partTitle": "part 1",
"typePart" : 1,
"statusPart" : 1},
{ "partTitle": "part 2",
"typePart" : 2,
"statusPart" : 2}]
},
{
"title" : "document 4",
"status" 2,
"documentParts" : [{ "partTitle": "part 1",
"typePart" : 1,
"statusPart" : 1},
{ "partTitle": "part 2",
"typePart" : 2,
"statusPart" : 1}]
>
我想要具有“documentParts”且“typePart = 1”和“statusPart = 1”的文档位于“documentParts”数组的同一项目中。
想要的文档是“文档 3”和“文档 4”,但是当我执行以下操作时,我获得了“文档 1”、“文档 3”、“文档 4”,因为查询在数组的任何元素中搜索,而不是在同一个元素中搜索数组项。
我的查询是:
{
"from": 0,
"size": 10,
"query": {
"bool": {
"must": [
{
"term": {
"status": {
"value": 2
}
}
},
{
"terms": {
"documentParts.typePart": [ 1 ],
"_name": "documentPartFilter"
}
},
{
"terms": {
"documentParts.statusPart": [ 1 ],
"_name": "documentPartStatusFilter"
}
}
]
}
}
}
如何在同一个数组项中进行搜索?
此查询检索数组中至少匹配一个条件的所有对象。预期结果应该是数组中所有满足所有条件的对象。
您需要使用嵌套字段类型。
嵌套类型是对象数据类型的特殊版本,它允许对象数组以可以彼此独立查询的方式进行索引。