Home > Back-end >  Elastic query combining should (boolean OR) with retrieval of nested documents
Elastic query combining should (boolean OR) with retrieval of nested documents

Time:05-12

I have an Elastic index with nested documents. I am trying to retrieve multiple documents by ids along with their nested documents. Retrieving the documents themselves is simple enough with a Should query, but where and how would I include the nested doc query in this?

Boolean "Should" query:

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

Query to retrieve nested docs:

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

It is not possible to add the nested query to each term query, because this gives a parsing exception: "[term] malformed query, expected [END_OBJECT] but found [FIELD_NAME]"

Also, it is not possible to add the nested doc query on the same level as the term queries, because then it would be treated as just another OR clause and simply retrieve all docs from the index.

Any ideas? Thanks!

CodePudding user response:

As per my understanding, you want to match any one id from list and retrive nested document. If my understanding correct then You need to combined both the query to must clause like below:

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