Skip to content

Commit 823bb8d

Browse files
committed
use inferred name; update error msg; update tests
1 parent 9d1184f commit 823bb8d

File tree

4 files changed

+20
-16
lines changed

4 files changed

+20
-16
lines changed

modules/parent-join/src/main/java/org/elasticsearch/join/query/HasChildQueryBuilder.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -460,13 +460,13 @@ protected QueryBuilder doRewrite(QueryRewriteContext queryShardContext) throws I
460460
@Override
461461
protected void extractInnerHitBuilders(Map<String, InnerHitContextBuilder> innerHits) {
462462
if (innerHitBuilder != null) {
463-
if (innerHits.containsKey(innerHitBuilder.getName())) {
464-
throw new IllegalArgumentException("innerHits already contains an entry for key [" + innerHitBuilder.getName() + "]");
463+
String name = innerHitBuilder.getName() != null ? innerHitBuilder.getName() : type;
464+
if (innerHits.containsKey(name)) {
465+
throw new IllegalArgumentException("[inner_hits] already contains an entry for key [" + name + "]");
465466
}
466467

467468
Map<String, InnerHitContextBuilder> children = new HashMap<>();
468469
InnerHitContextBuilder.extractInnerHits(query, children);
469-
String name = innerHitBuilder.getName() != null ? innerHitBuilder.getName() : type;
470470
InnerHitContextBuilder innerHitContextBuilder =
471471
new ParentChildInnerHitContextBuilder(type, true, query, innerHitBuilder, children);
472472
innerHits.put(name, innerHitContextBuilder);

modules/parent-join/src/main/java/org/elasticsearch/join/query/HasParentQueryBuilder.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -285,13 +285,13 @@ protected QueryBuilder doRewrite(QueryRewriteContext queryShardContext) throws I
285285
@Override
286286
protected void extractInnerHitBuilders(Map<String, InnerHitContextBuilder> innerHits) {
287287
if (innerHitBuilder != null) {
288-
if (innerHits.containsKey(innerHitBuilder.getName())) {
289-
throw new IllegalArgumentException("innerHits already contains an entry for key [" + innerHitBuilder.getName() + "]");
288+
String name = innerHitBuilder.getName() != null ? innerHitBuilder.getName() : type;
289+
if (innerHits.containsKey(name)) {
290+
throw new IllegalArgumentException("[inner_hits] already contains an entry for key [" + name + "]");
290291
}
291292

292293
Map<String, InnerHitContextBuilder> children = new HashMap<>();
293294
InnerHitContextBuilder.extractInnerHits(query, children);
294-
String name = innerHitBuilder.getName() != null ? innerHitBuilder.getName() : type;
295295
InnerHitContextBuilder innerHitContextBuilder =
296296
new ParentChildInnerHitContextBuilder(type, false, query, innerHitBuilder, children);
297297
innerHits.put(name, innerHitContextBuilder);

server/src/main/java/org/elasticsearch/index/query/NestedQueryBuilder.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -318,13 +318,13 @@ protected QueryBuilder doRewrite(QueryRewriteContext queryRewriteContext) throws
318318
@Override
319319
public void extractInnerHitBuilders(Map<String, InnerHitContextBuilder> innerHits) {
320320
if (innerHitBuilder != null) {
321-
if (innerHits.containsKey(innerHitBuilder.getName())) {
322-
throw new IllegalArgumentException("innerHits already contains an entry for key [" + innerHitBuilder.getName() + "]");
321+
String name = innerHitBuilder.getName() != null ? innerHitBuilder.getName() : path;
322+
if (innerHits.containsKey(name)) {
323+
throw new IllegalArgumentException("[inner_hits] already contains an entry for key [" + name + "]");
323324
}
324325

325326
Map<String, InnerHitContextBuilder> children = new HashMap<>();
326327
InnerHitContextBuilder.extractInnerHits(query, children);
327-
String name = innerHitBuilder.getName() != null ? innerHitBuilder.getName() : path;
328328
InnerHitContextBuilder innerHitContextBuilder = new NestedInnerHitContextBuilder(path, query, innerHitBuilder, children);
329329
innerHits.put(name, innerHitContextBuilder);
330330
}

server/src/test/java/org/elasticsearch/search/aggregations/bucket/NestedIT.java

+11-7
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,7 @@ public void testFilterAggInsideNestedAgg() throws Exception {
680680
assertThat(numStringParams.getDocCount(), equalTo(0L));
681681
}
682682

683-
public void testExtractInnerHitBuildersWithDuplicateName() throws Exception {
683+
public void testExtractInnerHitBuildersWithDuplicateHitName() throws Exception {
684684
assertAcked(
685685
prepareCreate("idxduplicatehitnames")
686686
.setSettings(Settings.builder().put(SETTING_NUMBER_OF_SHARDS, 1).put(SETTING_NUMBER_OF_REPLICAS, 0))
@@ -698,23 +698,27 @@ public void testExtractInnerHitBuildersWithDuplicateName() throws Exception {
698698
assertFailures(
699699
searchRequestBuilder,
700700
RestStatus.BAD_REQUEST,
701-
containsString("innerHits already contains an entry for key [ih1]"));
701+
containsString("[inner_hits] already contains an entry for key [ih1]"));
702702
}
703703

704-
public void testExtractInnerHitBuildersWithNullName() throws Exception {
704+
public void testExtractInnerHitBuildersWithDuplicatePath() throws Exception {
705705
assertAcked(
706706
prepareCreate("idxnullhitnames")
707707
.setSettings(Settings.builder().put(SETTING_NUMBER_OF_SHARDS, 1).put(SETTING_NUMBER_OF_REPLICAS, 0))
708708
.addMapping("product", "categories", "type=keyword", "name", "type=text", "property", "type=nested")
709709
);
710710
ensureGreen("idxnullhitnames");
711711

712-
SearchResponse response = client().prepareSearch("idxnullhitnames")
712+
SearchRequestBuilder searchRequestBuilder = client()
713+
.prepareSearch("idxnullhitnames")
713714
.setQuery(boolQuery()
714715
.should(nestedQuery("property", termQuery("property.id", 1D), ScoreMode.None).innerHit(new InnerHitBuilder()))
715716
.should(nestedQuery("property", termQuery("property.id", 1D), ScoreMode.None).innerHit(new InnerHitBuilder()))
716-
.should(nestedQuery("property", termQuery("property.id", 1D), ScoreMode.None).innerHit(new InnerHitBuilder()))
717-
).get();
718-
assertNoFailures(response);
717+
.should(nestedQuery("property", termQuery("property.id", 1D), ScoreMode.None).innerHit(new InnerHitBuilder())));
718+
719+
assertFailures(
720+
searchRequestBuilder,
721+
RestStatus.BAD_REQUEST,
722+
containsString("[inner_hits] already contains an entry for key [property]"));
719723
}
720724
}

0 commit comments

Comments
 (0)