diff --git a/src/main/java/org/elasticsearch/index/search/child/TopChildrenQuery.java b/src/main/java/org/elasticsearch/index/search/child/TopChildrenQuery.java index b40868b5374..e14d1e8247c 100644 --- a/src/main/java/org/elasticsearch/index/search/child/TopChildrenQuery.java +++ b/src/main/java/org/elasticsearch/index/search/child/TopChildrenQuery.java @@ -176,7 +176,7 @@ public class TopChildrenQuery extends Query { int resolveParentDocuments(TopDocs topDocs, SearchContext context, Recycler.V> parentDocs) throws Exception { int parentHitsResolved = 0; Recycler.V>>> parentDocsPerReader = cacheRecycler.hashMap(context.searcher().getIndexReader().leaves().size()); - for (ScoreDoc scoreDoc : topDocs.scoreDocs) { + child_hits: for (ScoreDoc scoreDoc : topDocs.scoreDocs) { int readerIndex = ReaderUtil.subIndex(scoreDoc.doc, context.searcher().getIndexReader().leaves()); AtomicReaderContext subContext = context.searcher().getIndexReader().leaves().get(readerIndex); BytesValues.WithOrdinals parentValues = parentChildIndexFieldData.load(subContext).getBytesValues(parentType); @@ -212,13 +212,11 @@ public class TopChildrenQuery extends Query { } if (parentDocId != DocsEnum.NO_MORE_DOCS) { // we found a match, add it and break - Recycler.V> readerParentDocs = parentDocsPerReader.v().get(indexReader.getCoreCacheKey()); if (readerParentDocs == null) { readerParentDocs = cacheRecycler.intObjectMap(indexReader.maxDoc()); parentDocsPerReader.v().put(indexReader.getCoreCacheKey(), readerParentDocs); } - ParentDoc parentDoc = readerParentDocs.v().get(parentDocId); if (parentDoc == null) { parentHitsResolved++; // we have a hit on a parent @@ -235,6 +233,7 @@ public class TopChildrenQuery extends Query { parentDoc.maxScore = scoreDoc.score; } } + continue child_hits; } } }