|
49 | 49 | import org.elasticsearch.common.lucene.search.function.CombineFunction;
|
50 | 50 | import org.elasticsearch.common.lucene.search.function.FunctionScoreQuery;
|
51 | 51 | import org.elasticsearch.index.VersionType;
|
| 52 | +import org.elasticsearch.index.query.InnerHitBuilder; |
52 | 53 | import org.elasticsearch.index.query.QueryBuilders;
|
53 | 54 | import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;
|
54 | 55 | import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder.FilterFunctionBuilder;
|
55 | 56 | import org.elasticsearch.index.query.functionscore.GaussDecayFunctionBuilder;
|
56 | 57 | import org.elasticsearch.join.query.ParentIdQueryBuilder;
|
57 | 58 | import org.elasticsearch.script.Script;
|
58 | 59 | import org.elasticsearch.script.ScriptType;
|
| 60 | +import org.elasticsearch.search.collapse.CollapseBuilder; |
59 | 61 | import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
|
60 | 62 | import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
|
61 | 63 | import org.elasticsearch.search.sort.FieldSortBuilder;
|
@@ -2811,6 +2813,39 @@ public void shouldReturnDocumentWithCollapsedField() {
|
2811 | 2813 | assertThat(searchHits.getSearchHit(1).getContent().getMessage()).isEqualTo("message 2");
|
2812 | 2814 | }
|
2813 | 2815 |
|
| 2816 | + @Test // #1493 |
| 2817 | + @DisplayName("should return document with collapse field and inner hits") |
| 2818 | + public void shouldReturnDocumentWithCollapsedFieldAndInnerHits() { |
| 2819 | + |
| 2820 | + // given |
| 2821 | + SampleEntity sampleEntity = SampleEntity.builder().id(nextIdAsString()).message("message 1").rate(1) |
| 2822 | + .version(System.currentTimeMillis()).build(); |
| 2823 | + SampleEntity sampleEntity2 = SampleEntity.builder().id(nextIdAsString()).message("message 2").rate(2) |
| 2824 | + .version(System.currentTimeMillis()).build(); |
| 2825 | + SampleEntity sampleEntity3 = SampleEntity.builder().id(nextIdAsString()).message("message 1").rate(1) |
| 2826 | + .version(System.currentTimeMillis()).build(); |
| 2827 | + |
| 2828 | + List<IndexQuery> indexQueries = getIndexQueries(Arrays.asList(sampleEntity, sampleEntity2, sampleEntity3)); |
| 2829 | + |
| 2830 | + operations.bulkIndex(indexQueries, index); |
| 2831 | + indexOperations.refresh(); |
| 2832 | + |
| 2833 | + NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) |
| 2834 | + .withCollapseBuilder(new CollapseBuilder("rate").setInnerHits(new InnerHitBuilder("innerHits"))).build(); |
| 2835 | + |
| 2836 | + // when |
| 2837 | + SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index); |
| 2838 | + |
| 2839 | + // then |
| 2840 | + assertThat(searchHits).isNotNull(); |
| 2841 | + assertThat(searchHits.getTotalHits()).isEqualTo(3); |
| 2842 | + assertThat(searchHits.getSearchHits()).hasSize(2); |
| 2843 | + assertThat(searchHits.getSearchHit(0).getContent().getMessage()).isEqualTo("message 1"); |
| 2844 | + assertThat(searchHits.getSearchHit(0).getInnerHits("innerHits").getTotalHits()).isEqualTo(2); |
| 2845 | + assertThat(searchHits.getSearchHit(1).getContent().getMessage()).isEqualTo("message 2"); |
| 2846 | + assertThat(searchHits.getSearchHit(1).getInnerHits("innerHits").getTotalHits()).isEqualTo(1); |
| 2847 | + } |
| 2848 | + |
2814 | 2849 | private IndexQuery getIndexQuery(SampleEntity sampleEntity) {
|
2815 | 2850 | return new IndexQueryBuilder().withId(sampleEntity.getId()).withObject(sampleEntity)
|
2816 | 2851 | .withVersion(sampleEntity.getVersion()).build();
|
@@ -3597,8 +3632,8 @@ void shouldSetScriptedFieldsOnImmutableObjects() {
|
3597 | 3632 | params.put("factor", 2);
|
3598 | 3633 | NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
3599 | 3634 | .withSourceFilter(new FetchSourceFilter(new String[] { "*" }, new String[] {}))
|
3600 |
| - .withScriptField( |
3601 |
| - new ScriptField("scriptedRate", new Script(ScriptType.INLINE, "expression", "doc['rate'] * factor", params))) |
| 3635 | + .withScriptField(new ScriptField("scriptedRate", |
| 3636 | + new Script(ScriptType.INLINE, "expression", "doc['rate'] * factor", params))) |
3602 | 3637 | .build();
|
3603 | 3638 |
|
3604 | 3639 | SearchHits<ImmutableWithScriptedEntity> searchHits = operations.search(searchQuery,
|
|
0 commit comments