我有一个弹性搜索索引,它有一个名为 plateformes 的嵌套对象。它的子文档数量可能会有所不同,如下所示:
{
"action" : "clean",
"plateformes" : [
{
"plateforme" : "myplateforme1",
"status" : "failure"
},
{
"plateforme" : "myplateforme2",
"status" : "succes"
},
{
"plateforme" : "myplateforme3",
"status" : "succes"
}
]
},
{
"action" : "activate",
"plateformes" : [
{
"plateforme" : "myplateforme1",
"status" : "failure"
},
{
"plateforme" : "myplateforme2",
"status" : "succes"
}
]
},
{
"action" : "delete",
"plateformes" : [
{
"plateforme" : "myplateforme1",
"status" : "succes"
}
]
}
现在,我想只获取 plateformes 完全(让我们说)一个嵌套文档的文档。通过上面的示例,查询必须只返回此文档:
{
"action" : "delete",
"plateformes" : [
{
"plateforme" : "myplateforme1",
"status" : "succes"
}
]
}
有办法吗?
答案 0 :(得分:1)
如果所有对象都具有状态,则可以使用exist检查对象是否存在,然后使用sum进行计算计数,然后使用脚本分数选择所需的条件。像下面的代码
{
"query": {
"function_score": {
"query": {
"nested": {
"path": "plateformes",
"query": {
"exists": {
"field": "plateformes.status"
}
},
"score_mode": "sum"
}
},
"functions": [
{
"script_score": {
"script": {
"source": "_score == 1 ? 1 : 0"
}
}
}
],
"boost_mode": "replace"
}
},
"min_score": 1
}
答案 1 :(得分:0)
您可以在索引时添加另一个字段plateformesCount
,在该索引编制时存储文档包含的platformes
个数。然后,只需将该字段与某个数字进行比较即非常快。
{
"action" : "clean",
"plateformesCount": 3,
"plateformes" : [
{
"plateforme" : "myplateforme1",
"status" : "failure"
},
{
"plateforme" : "myplateforme2",
"status" : "succes"
},
{
"plateforme" : "myplateforme3",
"status" : "succes"
}
]
},
{
"action" : "activate",
"plateformesCount": 2,
"plateformes" : [
{
"plateforme" : "myplateforme1",
"status" : "failure"
},
{
"plateforme" : "myplateforme2",
"status" : "succes"
}
]
},
{
"action" : "delete",
"plateformesCount": 1,
"plateformes" : [
{
"plateforme" : "myplateforme1",
"status" : "succes"
}
]
}