Skip to content

Commit 1a9e2b8

Browse files
keljimczi
authored andcommitted
Add version support for inner hits in field collapsing (#27822) (#27833)
Add version support for inner hits in field collapsing
1 parent 3b06cc7 commit 1a9e2b8

File tree

3 files changed

+70
-2
lines changed

3 files changed

+70
-2
lines changed

core/src/main/java/org/elasticsearch/action/search/ExpandSearchPhase.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ private SearchSourceBuilder buildExpandSearchSourceBuilder(InnerHitBuilder optio
165165
}
166166
groupSource.explain(options.isExplain());
167167
groupSource.trackScores(options.isTrackScores());
168+
groupSource.version(options.isVersion());
168169
return groupSource;
169170
}
170171
}

core/src/test/java/org/elasticsearch/action/search/ExpandSearchPhaseTests.java

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

2222
import org.elasticsearch.action.ActionListener;
23-
import org.elasticsearch.action.support.IndicesOptions;
2423
import org.elasticsearch.common.document.DocumentField;
2524
import org.elasticsearch.common.settings.Settings;
2625
import org.elasticsearch.common.text.Text;
@@ -246,6 +245,8 @@ public void run() throws IOException {
246245

247246
public void testExpandRequestOptions() throws IOException {
248247
MockSearchPhaseContext mockSearchPhaseContext = new MockSearchPhaseContext(1);
248+
boolean version = randomBoolean();
249+
249250
mockSearchPhaseContext.searchTransport = new SearchTransportService(
250251
Settings.builder().put("search.remote.connect", false).build(), null, null) {
251252

@@ -254,13 +255,14 @@ void sendExecuteMultiSearch(MultiSearchRequest request, SearchTask task, ActionL
254255
final QueryBuilder postFilter = QueryBuilders.existsQuery("foo");
255256
assertTrue(request.requests().stream().allMatch((r) -> "foo".equals(r.preference())));
256257
assertTrue(request.requests().stream().allMatch((r) -> "baz".equals(r.routing())));
258+
assertTrue(request.requests().stream().allMatch((r) -> version == r.source().version()));
257259
assertTrue(request.requests().stream().allMatch((r) -> postFilter.equals(r.source().postFilter())));
258260
}
259261
};
260262
mockSearchPhaseContext.getRequest().source(new SearchSourceBuilder()
261263
.collapse(
262264
new CollapseBuilder("someField")
263-
.setInnerHits(new InnerHitBuilder().setName("foobarbaz"))
265+
.setInnerHits(new InnerHitBuilder().setName("foobarbaz").setVersion(version))
264266
)
265267
.postFilter(QueryBuilders.existsQuery("foo")))
266268
.preference("foobar")

rest-api-spec/src/main/resources/rest-api-spec/test/search/110_field_collapsing.yml

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,36 +7,48 @@ setup:
77
index: test
88
type: test
99
id: 1
10+
version_type: external
11+
version: 11
1012
body: { numeric_group: 1, sort: 10 }
1113
- do:
1214
index:
1315
index: test
1416
type: test
1517
id: 2
18+
version_type: external
19+
version: 22
1620
body: { numeric_group: 1, sort: 6 }
1721
- do:
1822
index:
1923
index: test
2024
type: test
2125
id: 3
26+
version_type: external
27+
version: 33
2228
body: { numeric_group: 1, sort: 24 }
2329
- do:
2430
index:
2531
index: test
2632
type: test
2733
id: 4
34+
version_type: external
35+
version: 44
2836
body: { numeric_group: 25, sort: 10 }
2937
- do:
3038
index:
3139
index: test
3240
type: test
3341
id: 5
42+
version_type: external
43+
version: 55
3444
body: { numeric_group: 25, sort: 5 }
3545
- do:
3646
index:
3747
index: test
3848
type: test
3949
id: 6
50+
version_type: external
51+
version: 66
4052
body: { numeric_group: 3, sort: 36 }
4153
- do:
4254
indices.refresh:
@@ -322,3 +334,56 @@ setup:
322334
- match: { hits.hits.2.inner_hits.sub_hits_desc.hits.total: 2 }
323335
- length: { hits.hits.2.inner_hits.sub_hits_desc.hits.hits: 1 }
324336
- match: { hits.hits.2.inner_hits.sub_hits_desc.hits.hits.0._id: "4" }
337+
338+
---
339+
"field collapsing, inner_hits and version":
340+
341+
- skip:
342+
version: " - 6.99.99"
343+
reason: "bug fixed in 7.0.0"
344+
345+
- do:
346+
search:
347+
index: test
348+
type: test
349+
body:
350+
collapse: { field: numeric_group, inner_hits: { name: sub_hits, version: true, size: 2, sort: [{ sort: asc }] } }
351+
sort: [{ sort: desc }]
352+
version: true
353+
354+
- match: { hits.total: 6 }
355+
- length: { hits.hits: 3 }
356+
- match: { hits.hits.0._index: test }
357+
- match: { hits.hits.0._type: test }
358+
- match: { hits.hits.0.fields.numeric_group: [3] }
359+
- match: { hits.hits.0.sort: [36] }
360+
- match: { hits.hits.0._id: "6" }
361+
- match: { hits.hits.0._version: 66 }
362+
- match: { hits.hits.0.inner_hits.sub_hits.hits.total: 1 }
363+
- length: { hits.hits.0.inner_hits.sub_hits.hits.hits: 1 }
364+
- match: { hits.hits.0.inner_hits.sub_hits.hits.hits.0._id: "6" }
365+
- match: { hits.hits.0.inner_hits.sub_hits.hits.hits.0._version: 66 }
366+
- match: { hits.hits.1._index: test }
367+
- match: { hits.hits.1._type: test }
368+
- match: { hits.hits.1.fields.numeric_group: [1] }
369+
- match: { hits.hits.1.sort: [24] }
370+
- match: { hits.hits.1._id: "3" }
371+
- match: { hits.hits.1._version: 33 }
372+
- match: { hits.hits.1.inner_hits.sub_hits.hits.total: 3 }
373+
- length: { hits.hits.1.inner_hits.sub_hits.hits.hits: 2 }
374+
- match: { hits.hits.1.inner_hits.sub_hits.hits.hits.0._id: "2" }
375+
- match: { hits.hits.1.inner_hits.sub_hits.hits.hits.0._version: 22 }
376+
- match: { hits.hits.1.inner_hits.sub_hits.hits.hits.1._id: "1" }
377+
- match: { hits.hits.1.inner_hits.sub_hits.hits.hits.1._version: 11 }
378+
- match: { hits.hits.2._index: test }
379+
- match: { hits.hits.2._type: test }
380+
- match: { hits.hits.2.fields.numeric_group: [25] }
381+
- match: { hits.hits.2.sort: [10] }
382+
- match: { hits.hits.2._id: "4" }
383+
- match: { hits.hits.2._version: 44 }
384+
- match: { hits.hits.2.inner_hits.sub_hits.hits.total: 2 }
385+
- length: { hits.hits.2.inner_hits.sub_hits.hits.hits: 2 }
386+
- match: { hits.hits.2.inner_hits.sub_hits.hits.hits.0._id: "5" }
387+
- match: { hits.hits.2.inner_hits.sub_hits.hits.hits.0._version: 55 }
388+
- match: { hits.hits.2.inner_hits.sub_hits.hits.hits.1._id: "4" }
389+
- match: { hits.hits.2.inner_hits.sub_hits.hits.hits.1._version: 44 }

0 commit comments

Comments
 (0)