Skip to content

Commit bbd73d5

Browse files
committed
Search: When all shards fail on second / third phase, make sure to return a response with proper shard failures, closes #1033.
1 parent b7d492a commit bbd73d5

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

modules/elasticsearch/src/main/java/org/elasticsearch/search/controller/SearchPhaseController.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@
2020
package org.elasticsearch.search.controller;
2121

2222
import org.apache.lucene.index.Term;
23-
import org.apache.lucene.search.*;
23+
import org.apache.lucene.search.FieldDoc;
24+
import org.apache.lucene.search.ScoreDoc;
25+
import org.apache.lucene.search.ShardFieldDocSortedHitQueue;
26+
import org.apache.lucene.search.SortField;
27+
import org.apache.lucene.search.TopFieldDocs;
2428
import org.apache.lucene.util.PriorityQueue;
2529
import org.elasticsearch.common.Nullable;
2630
import org.elasticsearch.common.collect.Iterables;
@@ -256,7 +260,13 @@ public InternalSearchResponse merge(ShardDoc[] sortedDocs, Map<SearchShardTarget
256260

257261
boolean sorted = false;
258262
int sortScoreIndex = -1;
259-
QuerySearchResult querySearchResult = Iterables.get(queryResults.values(), 0).queryResult();
263+
QuerySearchResult querySearchResult;
264+
try {
265+
querySearchResult = Iterables.get(queryResults.values(), 0).queryResult();
266+
} catch (IndexOutOfBoundsException e) {
267+
// no results, return an empty response
268+
return InternalSearchResponse.EMPTY;
269+
}
260270

261271
if (querySearchResult.topDocs() instanceof TopFieldDocs) {
262272
sorted = true;

modules/elasticsearch/src/main/java/org/elasticsearch/search/internal/InternalSearchResponse.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public class InternalSearchResponse implements Streamable, ToXContent {
4343

4444
private boolean timedOut;
4545

46+
public static final InternalSearchResponse EMPTY = new InternalSearchResponse(new InternalSearchHits(new InternalSearchHit[0], 0, 0), null, false);
47+
4648
private InternalSearchResponse() {
4749
}
4850

0 commit comments

Comments
 (0)