我在elasticsearch v7.3中使用父子关系,假设我的父文档由“用户”组成,而且每个父文档的子文档不止一个。现在在我的所有子文档中,我都有一个文本字段,假设“名称”的值为“ raju”或“ yash”等。我的查询是获取所有父文档,其子文档中不得包含“ name”等于到“ raju”。
即,假设父文档中有4个子文档,即使一个子文档的名称为“ raju”,则其父文档也必须取消资格,并且不得检索。因此,我会问是否有人可以帮助我。
"has_child": {
"type": "child_1",
"query": [
{
"bool": {
"must_not": [
{
"match_phrase": {
"name": "raju"
}
}
]
}
}
]
}
答案 0 :(得分:1)
您应该逆转查询逻辑。 must_not
子句应位于父级。
您可以测试以下内容吗:
{
"query": {
"bool": {
"filter": [
{
"has_child": {
"type": "child_1",
"query": {
"match_all": {}
},
"score_mode": "none"
}
}
],
"must_not": [
{
"has_child": {
"type": "child_1",
"query": {
"match_phrase": {
"name": "raju"
}
},
"score_mode": "none"
}
}
]
}
}
}
NB:过滤器子句确保注释中指出的返回文档是父文档