/** Releases shard targets that are not used in the docsIdsToLoad. */
 protected void releaseIrrelevantSearchContexts(
     AtomicArray<? extends QuerySearchResultProvider> queryResults,
     AtomicArray<IntArrayList> docIdsToLoad) {
   if (docIdsToLoad == null) {
     return;
   }
   // we only release search context that we did not fetch from if we are not scrolling
   if (request.scroll() == null) {
     for (AtomicArray.Entry<? extends QuerySearchResultProvider> entry : queryResults.asList()) {
       QuerySearchResult queryResult = entry.value.queryResult();
       if (queryResult.hasHits()
           && docIdsToLoad.get(entry.index)
               == null) { // but none of them made it to the global top docs
         try {
           DiscoveryNode node =
               nodeIdToDiscoveryNode.apply(entry.value.queryResult().shardTarget().nodeId());
           sendReleaseSearchContext(entry.value.queryResult().id(), node);
         } catch (Exception e) {
           logger.trace("failed to release context", e);
         }
       }
     }
   }
 }