elasticsearch 在ElasticSearch中匹配同一嵌套文档上的多个属性,elasticsearch,nosql,elasticsearch,Nosql" /> elasticsearch 在ElasticSearch中匹配同一嵌套文档上的多个属性,elasticsearch,nosql,elasticsearch,Nosql" />

elasticsearch 在ElasticSearch中匹配同一嵌套文档上的多个属性

elasticsearch 在ElasticSearch中匹配同一嵌套文档上的多个属性,elasticsearch,nosql,elasticsearch,Nosql,我试图在ElasticSearch中完成嵌套文档上的布尔和。假设我有以下两个文件 { "id": 1, "secondLevels": [ { "thirdLevels": [ { "isActive": true, "user": "anotheruser@domain.com" }

我试图在ElasticSearch中完成嵌套文档上的布尔
。假设我有以下两个文件

{
    "id": 1,
    "secondLevels": [
        {
            "thirdLevels": [
                {
                    "isActive": true,
                    "user": "anotheruser@domain.com"
                }
            ]
        },
        {
            "thirdLevels": [
                {
                    "isActive": false,
                    "user": "user@domain.com"
                }
            ]
        }
    ]
}
{
    "id": 2,
    "secondLevels": [
        {
            "thirdLevels": [
                {
                    "isActive": true,
                    "user": "user@domain.com"
                }
            ]
        }
    ]
}
在本例中,我只希望匹配具有嵌套文档的文档(在本例中ID:2),这些文档同时具有
isActive:true
用户:user@domain.com

{
    "query": {
        "bool": {
            "must": [
                {
                    "nested": {
                        "path": "secondLevels.thirdLevels",
                        "query": {
                            "bool": {
                                "must": [
                                    {
                                        "term": {
                                            "secondLevels.thirdLevels.isActive": true
                                        }
                                    },
                                    {
                                        "term": {
                                            "secondLevels.thirdLevels.user": "user@domain.com"
                                        }
                                    }
                                ]
                            }
                        }
                    }
                }
            ]
        }
    }
}
然而,我的查询似乎同时显示了两个文档,因为第一个文档有一个
thirdLevel
,它具有
isActive:true
,另一个
thirdLevel
,它具有适当的用户


有没有办法在查询/筛选时严格执行此操作,或者我必须在脚本中执行此操作?

对于嵌套对象和嵌套查询,您已经充分利用了这一方法

您现在需要做的就是添加标志,并将整个
secondLevels
文档移到一边:

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "secondLevels.thirdLevels",
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "secondLevels.thirdLevels.isActive": true
                    }
                  },
                  {
                    "term": {
                      "secondLevels.thirdLevels.user": "user@domain.com"
                    }
                  }
                ]
              }
            },
            "inner_hits": {
              "size": 100
            }
          }
        }
      ]
    }
  }
}

你用的是什么型号的橡皮筋?我已经创建了一个索引并在本地测试了您的查询,我只返回id=2的用户。我问的原因是,我相信“必须”分组应该默认为,除非您可能以某种方式默认为或