Before you begin reading this guide, we recommend you try running the Elasticsearch Error Check-Up which analyzes 2 JSON files to detect many configuration errors.
Briefly, this error message indicates that Elasticsearch was unable to find a nested object in the specified path. Nested objects are objects that are nested within other objects. In Elasticsearch, nested objects can be used to represent complex structures in a document, such as arrays of objects or hierarchical structures. When performing a nested aggregation, Elasticsearch needs to access the nested object in order to aggregate the data. If the nested object cannot be found in the specified path, this error will be thrown.
To easily locate the root cause and resolve this issue try AutoOps for Elasticsearch & OpenSearch. It diagnoses problems by analyzing hundreds of metrics collected by a lightweight agent and offers guidance for resolving them.
This guide will help you check for common problems that cause the log ” nested failed to find nested object under path ” + nestedPath + ” ” to appear. To understand the issues related to this log, read the explanation below about the following Elasticsearch concepts: sort and search.
Overview
Search refers to the searching of documents in an index or multiple indices. The simple search is just a GET API request to the _search endpoint. The search query can either be provided in query string or through a request body.
Examples
When looking for any documents in this index, if search parameters are not provided, every document is a hit and by default 10 hits will be returned.
GET my_documents/_search
A JSON object is returned in response to a search query. A 200 response code means the request was completed successfully.
{ "took" : 1, "timed_out" : false, "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 1.0, "hits" : [ ... ] } }
Notes and good things to know
- Distributed search is challenging and every shard of the index needs to be searched for hits, and then those hits are combined into a single sorted list as a final result.
- There are two phases of search: the query phase and the fetch phase.
- In the query phase, the query is executed on each shard locally and top hits are returned to the coordinating node. The coordinating node merges the results and creates a global sorted list.
- In the fetch phase, the coordinating node brings the actual documents for those hit IDs and returns them to the requesting client.
- A coordinating node needs enough memory and CPU in order to handle the fetch phase.
Log Context
Log “[nested] failed to find nested object under path [” + nestedPath + “]”classname is SortBuilder.java We extracted the following from Elasticsearch source code for those seeking an in-depth context :
// verify our nested path ObjectMapper nestedObjectMapper = context.getObjectMapper(nestedPath); if (nestedObjectMapper == null) { throw new QueryShardException(context; "[nested] failed to find nested object under path [" + nestedPath + "]"); } if (nestedObjectMapper.nested().isNested() == false) { throw new QueryShardException(context; "[nested] nested object under path [" + nestedPath + "] is not of nested type"); } ObjectMapper objectMapper = context.nestedScope().getObjectMapper();
See how you can use AutoOps to resolve issues