DATAES-593 - Add support for field collapse function.

Original PR: #290
This commit is contained in:
Martin Choraine
2019-06-24 20:18:38 +02:00
committed by Peter-Josef Meisch
parent f1aa75a94f
commit 0d1c57a874
8 changed files with 105 additions and 4 deletions

View File

@@ -105,6 +105,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
* @author Ivan Greene
* @author Dmitriy Yakovlev
* @author Peter-Josef Meisch
* @author Martin Choraine
* @author Farid Azaza
*/
@RunWith(SpringJUnit4ClassRunner.class)
@@ -2825,6 +2826,36 @@ public class ElasticsearchTemplateTests {
assertThat(sampleEntities.get(2).getMessage()).isEqualTo(sampleEntity1.getMessage());
}
@Test // DATAES-593
public void shouldReturnDocumentWithCollapsedField() {
// given
SampleEntity sampleEntity = SampleEntity.builder().id(randomNumeric(5)).message("message 1").rate(1)
.version(System.currentTimeMillis()).build();
SampleEntity sampleEntity2 = SampleEntity.builder().id(randomNumeric(5)).message("message 2").rate(2)
.version(System.currentTimeMillis()).build();
SampleEntity sampleEntit3 = SampleEntity.builder().id(randomNumeric(5)).message("message 1").rate(1)
.version(System.currentTimeMillis()).build();
List<IndexQuery> indexQueries = getIndexQueries(Arrays.asList(sampleEntity, sampleEntity2, sampleEntit3));
elasticsearchTemplate.bulkIndex(indexQueries);
elasticsearchTemplate.refresh(SampleEntity.class);
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
.withIndices(INDEX_NAME_SAMPLE_ENTITY).withTypes(TYPE_NAME).withCollapse("rate").build();
// when
Page<SampleEntity> page = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
// then
assertThat(page).isNotNull();
assertThat(page.getTotalElements()).isEqualTo(3);
assertThat(page.getContent()).hasSize(2);
assertThat(page.getContent().get(0).getMessage()).isEqualTo("message 1");
assertThat(page.getContent().get(1).getMessage()).isEqualTo("message 2");
}
private IndexQuery getIndexQuery(SampleEntity sampleEntity) {
return new IndexQueryBuilder().withId(sampleEntity.getId()).withObject(sampleEntity)
.withVersion(sampleEntity.getVersion()).build();

View File

@@ -24,6 +24,8 @@ import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
@@ -76,6 +78,7 @@ import org.springframework.util.StringUtils;
* @author Mark Paluch
* @author Peter-Josef Meisch
* @author Farid Azaza
* @author Martin Choraine
* @currentRead Golden Fool - Robin Hobb
*/
@RunWith(SpringRunner.class)
@@ -666,6 +669,30 @@ public class ReactiveElasticsearchTemplateTests {
.verifyComplete();
}
@Test // DATAES-593
public void shouldReturnDocumentWithCollapsedField() {
SampleEntity entity1 = randomEntity("test message");
entity1.setRate(1);
SampleEntity entity2 = randomEntity("test another message");
entity2.setRate(2);
SampleEntity entity3 = randomEntity("test message again");
entity3.setRate(1);
index(entity1, entity2, entity3);
SearchQuery query = new NativeSearchQueryBuilder()
.withIndices(DEFAULT_INDEX)
.withQuery(matchAllQuery())
.withCollapse("rate")
.withPageable(PageRequest.of(0, 25))
.build();
template.find(query, SampleEntity.class)
.as(StepVerifier::create)
.expectNextCount(2)
.verifyComplete();
}
@Data
@Document(indexName = "marvel", type = "characters")
static class Person {
@@ -733,6 +760,7 @@ public class ReactiveElasticsearchTemplateTests {
@Id private String id;
@Field(type = Text, store = true, fielddata = true) private String message;
private int rate;
@Version private Long version;
@Score private float score;
}