Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/changelog/104666.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pr: 104666
summary: Require the name field for `inner_hits` for collapse
area: Search
type: bug
issues: []
Original file line number Diff line number Diff line change
Expand Up @@ -515,3 +515,15 @@ setup:
- match: { hits.hits.2.inner_hits.sub_hits.hits.hits.1._id: "4" }
- gte: { hits.hits.2.inner_hits.sub_hits.hits.hits.1._seq_no: 0 }
- gte: { hits.hits.2.inner_hits.sub_hits.hits.hits.1._primary_term: 1 }
---
"Test collapse with inner_hits and missing name fails":
- skip:
version: " - 8.12.99"
reason: fixed in 8.13
- do:
catch: bad_request
search:
index: test
body:
collapse: { field: numeric_group, inner_hits: { size: 1 } }
sort: [{ sort: desc }]
Original file line number Diff line number Diff line change
Expand Up @@ -102,11 +102,21 @@ private CollapseBuilder setField(String field) {
}

public CollapseBuilder setInnerHits(InnerHitBuilder innerHit) {
if (innerHit.getName() == null) {
throw new IllegalArgumentException("inner_hits must have a [name]; set the [name] field in the inner_hits definition");
}
this.innerHits = Collections.singletonList(innerHit);
return this;
}

public CollapseBuilder setInnerHits(List<InnerHitBuilder> innerHits) {
if (innerHits != null) {
for (InnerHitBuilder innerHit : innerHits) {
if (innerHit.getName() == null) {
throw new IllegalArgumentException("inner_hits must have a [name]; set the [name] field in the inner_hits definition");
}
}
}
this.innerHits = innerHits;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ public void testBuild() throws IOException {
null
);
when(searchExecutionContext.getFieldType("field")).thenReturn(numberFieldType);
builder.setInnerHits(new InnerHitBuilder());
builder.setInnerHits(new InnerHitBuilder().setName("field"));
exc = expectThrows(IllegalArgumentException.class, () -> builder.build(searchExecutionContext));
assertEquals(
exc.getMessage(),
Expand All @@ -194,7 +194,7 @@ public void testBuild() throws IOException {

keywordFieldType = new KeywordFieldMapper.KeywordFieldType("field", false, true, Collections.emptyMap());
when(searchExecutionContext.getFieldType("field")).thenReturn(keywordFieldType);
kbuilder.setInnerHits(new InnerHitBuilder());
kbuilder.setInnerHits(new InnerHitBuilder().setName("field"));
exc = expectThrows(IllegalArgumentException.class, () -> builder.build(searchExecutionContext));
assertEquals(
exc.getMessage(),
Expand Down