diff --git a/core/src/main/java/org/elasticsearch/search/internal/InternalSearchHit.java b/core/src/main/java/org/elasticsearch/search/internal/InternalSearchHit.java index 649bdc22370..bc187d907e7 100644 --- a/core/src/main/java/org/elasticsearch/search/internal/InternalSearchHit.java +++ b/core/src/main/java/org/elasticsearch/search/internal/InternalSearchHit.java @@ -38,12 +38,12 @@ import org.elasticsearch.common.xcontent.ToXContent; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilderString; import org.elasticsearch.common.xcontent.XContentHelper; -import org.elasticsearch.index.fielddata.fieldcomparator.BytesRefFieldComparatorSource; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHitField; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.SearchShardTarget; import org.elasticsearch.search.highlight.HighlightField; +import org.elasticsearch.search.internal.InternalSearchHits.StreamContext.ShardTargetType; import org.elasticsearch.search.lookup.SourceLookup; import java.io.IOException; @@ -556,7 +556,7 @@ public class InternalSearchHit implements SearchHit { @Override public void readFrom(StreamInput in) throws IOException { - readFrom(in, InternalSearchHits.streamContext().streamShardTarget(InternalSearchHits.StreamContext.ShardTargetType.STREAM)); + readFrom(in, InternalSearchHits.streamContext().streamShardTarget(ShardTargetType.STREAM)); } public void readFrom(StreamInput in, InternalSearchHits.StreamContext context) throws IOException { @@ -678,11 +678,11 @@ public class InternalSearchHit implements SearchHit { } } - if (context.streamShardTarget() == InternalSearchHits.StreamContext.ShardTargetType.STREAM) { + if (context.streamShardTarget() == ShardTargetType.STREAM) { if (in.readBoolean()) { shard = readSearchShardTarget(in); } - } else if (context.streamShardTarget() == InternalSearchHits.StreamContext.ShardTargetType.LOOKUP) { + } else if (context.streamShardTarget() == ShardTargetType.LOOKUP) { int lookupId = in.readVInt(); if (lookupId > 0) { shard = context.handleShardLookup().get(lookupId); @@ -694,7 +694,9 @@ public class InternalSearchHit implements SearchHit { innerHits = new HashMap<>(size); for (int i = 0; i < size; i++) { String key = in.readString(); - InternalSearchHits value = InternalSearchHits.readSearchHits(in, InternalSearchHits.streamContext().streamShardTarget(InternalSearchHits.StreamContext.ShardTargetType.NO_STREAM)); + ShardTargetType shardTarget = InternalSearchHits.streamContext().streamShardTarget(); + InternalSearchHits value = InternalSearchHits.readSearchHits(in, InternalSearchHits.streamContext().streamShardTarget(ShardTargetType.NO_STREAM)); + InternalSearchHits.streamContext().streamShardTarget(shardTarget); innerHits.put(key, value); } } @@ -702,7 +704,7 @@ public class InternalSearchHit implements SearchHit { @Override public void writeTo(StreamOutput out) throws IOException { - writeTo(out, InternalSearchHits.streamContext().streamShardTarget(InternalSearchHits.StreamContext.ShardTargetType.STREAM)); + writeTo(out, InternalSearchHits.streamContext().streamShardTarget(ShardTargetType.STREAM)); } public void writeTo(StreamOutput out, InternalSearchHits.StreamContext context) throws IOException { @@ -787,14 +789,14 @@ public class InternalSearchHit implements SearchHit { } } - if (context.streamShardTarget() == InternalSearchHits.StreamContext.ShardTargetType.STREAM) { + if (context.streamShardTarget() == ShardTargetType.STREAM) { if (shard == null) { out.writeBoolean(false); } else { out.writeBoolean(true); shard.writeTo(out); } - } else if (context.streamShardTarget() == InternalSearchHits.StreamContext.ShardTargetType.LOOKUP) { + } else if (context.streamShardTarget() == ShardTargetType.LOOKUP) { if (shard == null) { out.writeVInt(0); } else { @@ -808,7 +810,9 @@ public class InternalSearchHit implements SearchHit { out.writeVInt(innerHits.size()); for (Map.Entry entry : innerHits.entrySet()) { out.writeString(entry.getKey()); - entry.getValue().writeTo(out, InternalSearchHits.streamContext().streamShardTarget(InternalSearchHits.StreamContext.ShardTargetType.NO_STREAM)); + ShardTargetType shardTarget = InternalSearchHits.streamContext().streamShardTarget(); + entry.getValue().writeTo(out, InternalSearchHits.streamContext().streamShardTarget(ShardTargetType.NO_STREAM)); + InternalSearchHits.streamContext().streamShardTarget(shardTarget); } } } diff --git a/core/src/test/java/org/elasticsearch/search/innerhits/InnerHitsIT.java b/core/src/test/java/org/elasticsearch/search/innerhits/InnerHitsIT.java index 1384b33bff2..a3d44e4baa2 100644 --- a/core/src/test/java/org/elasticsearch/search/innerhits/InnerHitsIT.java +++ b/core/src/test/java/org/elasticsearch/search/innerhits/InnerHitsIT.java @@ -122,6 +122,7 @@ public class InnerHitsIT extends ESIntegTestCase { assertNoFailures(response); assertHitCount(response, 1); assertSearchHit(response, 1, hasId("2")); + assertThat(response.getHits().getAt(0).getShard(), notNullValue()); assertThat(response.getHits().getAt(0).getInnerHits().size(), equalTo(1)); SearchHits innerHits = response.getHits().getAt(0).getInnerHits().get("comment"); assertThat(innerHits.totalHits(), equalTo(3l)); @@ -223,6 +224,7 @@ public class InnerHitsIT extends ESIntegTestCase { assertThat(searchResponse.getHits().getHits().length, equalTo(numDocs)); for (int i = 0; i < numDocs; i++) { SearchHit searchHit = searchResponse.getHits().getAt(i); + assertThat(searchHit.getShard(), notNullValue()); SearchHits inner = searchHit.getInnerHits().get("a"); assertThat(inner.totalHits(), equalTo((long) field1InnerObjects[i])); for (int j = 0; j < field1InnerObjects[i] && j < size; j++) { @@ -275,6 +277,7 @@ public class InnerHitsIT extends ESIntegTestCase { assertNoFailures(response); assertHitCount(response, 1); assertSearchHit(response, 1, hasId("1")); + assertThat(response.getHits().getAt(0).getShard(), notNullValue()); assertThat(response.getHits().getAt(0).getInnerHits().size(), equalTo(1)); SearchHits innerHits = response.getHits().getAt(0).getInnerHits().get("comment"); @@ -411,6 +414,7 @@ public class InnerHitsIT extends ESIntegTestCase { SearchHit searchHit = searchResponse.getHits().getAt(parent); assertThat(searchHit.getType(), equalTo("parent")); assertThat(searchHit.getId(), equalTo(String.format(Locale.ENGLISH, "%03d", parent))); + assertThat(searchHit.getShard(), notNullValue()); SearchHits inner = searchHit.getInnerHits().get("a"); assertThat(inner.totalHits(), equalTo((long) child1InnerObjects[parent]));