Skip to content

Commit decba88

Browse files
committed
Fix inner hits to work with queries wrapped in an indices query.
Closes #26133
1 parent 1df7224 commit decba88

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

core/src/main/java/org/elasticsearch/index/query/IndicesQueryBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.util.ArrayList;
3434
import java.util.Arrays;
3535
import java.util.Collection;
36+
import java.util.Map;
3637
import java.util.Objects;
3738
import java.util.Optional;
3839

@@ -232,6 +233,12 @@ protected Query doToQuery(QueryShardContext context) throws IOException {
232233
return noMatchQuery.toQuery(context);
233234
}
234235

236+
@Override
237+
protected void extractInnerHitBuilders(Map<String, InnerHitContextBuilder> innerHits) {
238+
InnerHitContextBuilder.extractInnerHits(innerQuery, innerHits);
239+
InnerHitContextBuilder.extractInnerHits(noMatchQuery, innerHits);
240+
}
241+
235242
@Override
236243
public int doHashCode() {
237244
return Objects.hash(innerQuery, noMatchQuery, Arrays.hashCode(indices));

core/src/test/java/org/elasticsearch/search/fetch/subphase/InnerHitsIT.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,23 +38,21 @@
3838
import org.elasticsearch.search.SearchHits;
3939
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
4040
import org.elasticsearch.search.sort.FieldSortBuilder;
41-
import org.elasticsearch.search.sort.SortBuilders;
4241
import org.elasticsearch.search.sort.SortOrder;
4342
import org.elasticsearch.test.ESIntegTestCase;
4443

4544
import java.util.ArrayList;
4645
import java.util.Collection;
4746
import java.util.Collections;
4847
import java.util.List;
49-
import java.util.Locale;
5048
import java.util.Map;
5149
import java.util.function.Function;
5250

5351
import static org.elasticsearch.action.support.WriteRequest.RefreshPolicy.IMMEDIATE;
5452
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
5553
import static org.elasticsearch.common.xcontent.support.XContentMapValues.extractValue;
5654
import static org.elasticsearch.index.query.QueryBuilders.boolQuery;
57-
import static org.elasticsearch.index.query.QueryBuilders.constantScoreQuery;
55+
import static org.elasticsearch.index.query.QueryBuilders.indicesQuery;
5856
import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
5957
import static org.elasticsearch.index.query.QueryBuilders.matchQuery;
6058
import static org.elasticsearch.index.query.QueryBuilders.nestedQuery;
@@ -636,4 +634,27 @@ public void testInnerHitsWithIgnoreUnmapped() throws Exception {
636634
assertSearchHits(response, "1", "3");
637635
}
638636

637+
public void testInnerHitsInsideIndicesQuery() throws Exception {
638+
assertAcked(prepareCreate("index1").addMapping("message", "comments", "type=nested"));
639+
client().prepareIndex("index1", "message", "1").setSource(jsonBuilder().startObject()
640+
.field("message", "quick brown fox")
641+
.startArray("comments")
642+
.startObject().field("message", "fox eat quick").endObject()
643+
.startObject().field("message", "fox ate rabbit x y z").endObject()
644+
.startObject().field("message", "rabbit got away").endObject()
645+
.endArray()
646+
.endObject()).get();
647+
refresh();
648+
649+
SearchResponse response = client().prepareSearch()
650+
.setQuery(indicesQuery(nestedQuery("comments", matchQuery("comments.message", "fox"), ScoreMode.None)
651+
.innerHit(new InnerHitBuilder()), "index1"))
652+
.get();
653+
assertNoFailures(response);
654+
assertHitCount(response, 1);
655+
656+
assertThat(response.getHits().getAt(0).getInnerHits().get("comments").getTotalHits(), equalTo(2L));
657+
assertThat(response.getHits().getAt(0).getInnerHits().get("comments").getAt(0).getNestedIdentity().getOffset(), equalTo(0));
658+
assertThat(response.getHits().getAt(0).getInnerHits().get("comments").getAt(1).getNestedIdentity().getOffset(), equalTo(1));
659+
}
639660
}

0 commit comments

Comments
 (0)