结合 should(布尔 OR)和嵌套文档检索的弹性查询

Elastic query combining should (boolean OR) with retrieval of nested documents

我有一个包含嵌套文档的弹性索引。我正在尝试通过 id 检索多个文档及其嵌套文档。使用 Should 查询检索文档本身非常简单,但是我应该在哪里以及如何在其中包含嵌套的文档查询?

布尔“应该”查询:

GET myIndex/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "id": "123"
          }
        },
        {
          "term": {
            "id": "456"
          }
        },
        {
          "term": {
            "id": "789"
          }
        }
      ]
    }
  }
}

检索嵌套文档的查询:

"nested": {
   "path": "myNestedDocs",
            "query": {
              "match_all": {}
}

不可能将嵌套查询添加到每个术语查询中,因为这会产生解析异常:“[term] 格式错误的查询,预计 [END_OBJECT] 但发现 [FIELD_NAME] “

此外,不可能将嵌套的文档查询添加到与术语查询相同的级别,因为那样它会被视为只是另一个 OR 子句并简单地从索引中检索所有文档。

有什么想法吗?谢谢!

据我了解,您想要匹配列表中的任何一个 id 并检索嵌套文档。如果我的理解正确,那么您需要将查询合并到 must 子句,如下所示:

{
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "id": [
              "123",
              "456",
              "789"
            ]
          }
        },
        {
          "nested": {
            "path": "myNestedDocs",
            "query": {
              "match_all": {}
            }
          }
        }
      ]
    }
  }
}