如何在ElasticSearch中基于子文档中的键值对取消父文档的资格

时间:2019-08-06 10:25:41

标签: elasticsearch

我在elasticsearch v7.3中使用父子关系,假设我的父文档由“用户”组成,而且每个父文档的子文档不止一个。现在在我的所有子文档中,我都有一个文本字段,假设“名称”的值为“ raju”或“ yash”等。我的查询是获取所有父文档,其子文档中不得包含“ name”等于到“ raju”。

即,假设父文档中有4个子文档,即使一个子文档的名称为“ raju”,则其父文档也必须取消资格,并且不得检索。因此,我会问是否有人可以帮助我。

                "has_child": {
                  "type": "child_1",
                  "query": [
                    {
                      "bool": {
                        "must_not": [
                          {
                            "match_phrase": {
                              "name": "raju"
                            }
                          }
                        ]
                      }
                    }
                  ]
                }

1 个答案:

答案 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:过滤器子句确保注释中指出的返回文档是父文档