Fix type of returned sort values.

Original Pull Request #2786
Closes #2777

(cherry picked from commit 3833975a1ad76ef9c90b1260b090ff1eb9af523c)
This commit is contained in:
Peter-Josef Meisch 2023-11-30 20:29:34 +01:00
parent df76b43cb4
commit 0fb98eda39
No known key found for this signature in database
GPG Key ID: DE108246970C7708
2 changed files with 29 additions and 28 deletions

View File

@ -138,7 +138,7 @@ final class DocumentAdapters {
document.setPrimaryTerm(hit.primaryTerm() != null && hit.primaryTerm() > 0 ? hit.primaryTerm() : 0); document.setPrimaryTerm(hit.primaryTerm() != null && hit.primaryTerm() > 0 ? hit.primaryTerm() : 0);
float score = hit.score() != null ? hit.score().floatValue() : Float.NaN; float score = hit.score() != null ? hit.score().floatValue() : Float.NaN;
return new SearchDocumentAdapter(document, score, hit.sort().stream().map(TypeUtils::toString).toArray(), return new SearchDocumentAdapter(document, score, hit.sort().stream().map(TypeUtils::toObject).toArray(),
documentFields, highlightFields, innerHits, nestedMetaData, explanation, matchedQueries, hit.routing()); documentFields, highlightFields, innerHits, nestedMetaData, explanation, matchedQueries, hit.routing());
} }
@ -237,3 +237,4 @@ final class DocumentAdapters {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
} }
🚝

View File

@ -103,27 +103,27 @@ public abstract class NestedSortIntegrationTests {
assertThat(searchHits.getSearchHit(0).getContent().id).isEqualTo(francisFordCoppola.id); assertThat(searchHits.getSearchHit(0).getContent().id).isEqualTo(francisFordCoppola.id);
var sortValues = searchHits.getSearchHit(0).getSortValues(); var sortValues = searchHits.getSearchHit(0).getSortValues();
assertThat(sortValues).hasSize(1); assertThat(sortValues).hasSize(1);
assertThat(sortValues.get(0)).isEqualTo("1924"); assertThat(sortValues.get(0)).isEqualTo(1924L);
assertThat(searchHits.getSearchHit(1).getContent().id).isEqualTo(stanleyKubrik.id); assertThat(searchHits.getSearchHit(1).getContent().id).isEqualTo(stanleyKubrik.id);
sortValues = searchHits.getSearchHit(1).getSortValues(); sortValues = searchHits.getSearchHit(1).getSortValues();
assertThat(sortValues).hasSize(1); assertThat(sortValues).hasSize(1);
assertThat(sortValues.get(0)).isEqualTo("1937"); assertThat(sortValues.get(0)).isEqualTo(1937L);
} }
@Test // #1784 @Test // #1784
@DisplayName("should sort directors by year of birth of actor in their movies descending") @DisplayName("should sort directors by year of birth of actor in their movies descending")
void shouldSortDirectorsByYearOfBirthOfActorInTheirMoviesDescending() { void shouldSortDirectorsByYearOfBirthOfActorInTheirMoviesDescending() {
var order = new org.springframework.data.elasticsearch.core.query.Order(Sort.Direction.DESC, var order = new org.springframework.data.elasticsearch.core.query.Order(Sort.Direction.DESC,
"movies.actors.yearOfBirth") // "movies.actors.yearOfBirth") //
.withNested( // .withNested( //
Nested.builder("movies") // Nested.builder("movies") //
.withNested(Nested.builder("movies.actors") // .withNested(Nested.builder("movies.actors") //
.build()) // .build()) //
.build()); .build());
var query = Query.findAll().addSort(Sort.by(order)); var query = Query.findAll().addSort(Sort.by(order));
var searchHits = operations.search(query, Director.class); var searchHits = operations.search(query, Director.class);
@ -132,32 +132,32 @@ var query = Query.findAll().addSort(Sort.by(order));
assertThat(searchHits.getSearchHit(0).getContent().id).isEqualTo(stanleyKubrik.id); assertThat(searchHits.getSearchHit(0).getContent().id).isEqualTo(stanleyKubrik.id);
var sortValues = searchHits.getSearchHit(0).getSortValues(); var sortValues = searchHits.getSearchHit(0).getSortValues();
assertThat(sortValues).hasSize(1); assertThat(sortValues).hasSize(1);
assertThat(sortValues.get(0)).isEqualTo("1959"); assertThat(sortValues.get(0)).isEqualTo(1959L);
assertThat(searchHits.getSearchHit(1).getContent().id).isEqualTo(francisFordCoppola.id); assertThat(searchHits.getSearchHit(1).getContent().id).isEqualTo(francisFordCoppola.id);
sortValues = searchHits.getSearchHit(1).getSortValues(); sortValues = searchHits.getSearchHit(1).getSortValues();
assertThat(sortValues).hasSize(1); assertThat(sortValues).hasSize(1);
assertThat(sortValues.get(0)).isEqualTo("1946"); assertThat(sortValues.get(0)).isEqualTo(1946L);
} }
@Test // #1784 @Test // #1784
@DisplayName("should sort directors by year of birth of male actor in their movies descending") @DisplayName("should sort directors by year of birth of male actor in their movies descending")
void shouldSortDirectorsByYearOfBirthOfMaleActorInTheirMoviesDescending() { void shouldSortDirectorsByYearOfBirthOfMaleActorInTheirMoviesDescending() {
var filter = StringQuery.builder(""" var filter = StringQuery.builder("""
{ "term": {"movies.actors.sex": "m"} } { "term": {"movies.actors.sex": "m"} }
""").build(); """).build();
var order = new org.springframework.data.elasticsearch.core.query.Order(Sort.Direction.DESC, var order = new org.springframework.data.elasticsearch.core.query.Order(Sort.Direction.DESC,
"movies.actors.yearOfBirth") // "movies.actors.yearOfBirth") //
.withNested( // .withNested( //
Nested.builder("movies") // Nested.builder("movies") //
.withNested( // .withNested( //
Nested.builder("movies.actors") // Nested.builder("movies.actors") //
.withFilter(filter) // .withFilter(filter) //
.build()) // .build()) //
.build()); .build());
var query = Query.findAll().addSort(Sort.by(order)); var query = Query.findAll().addSort(Sort.by(order));
var searchHits = operations.search(query, Director.class); var searchHits = operations.search(query, Director.class);
@ -166,12 +166,12 @@ var query = Query.findAll().addSort(Sort.by(order));
assertThat(searchHits.getSearchHit(0).getContent().id).isEqualTo(stanleyKubrik.id); assertThat(searchHits.getSearchHit(0).getContent().id).isEqualTo(stanleyKubrik.id);
var sortValues = searchHits.getSearchHit(0).getSortValues(); var sortValues = searchHits.getSearchHit(0).getSortValues();
assertThat(sortValues).hasSize(1); assertThat(sortValues).hasSize(1);
assertThat(sortValues.get(0)).isEqualTo("1959"); assertThat(sortValues.get(0)).isEqualTo(1959L);
assertThat(searchHits.getSearchHit(1).getContent().id).isEqualTo(francisFordCoppola.id); assertThat(searchHits.getSearchHit(1).getContent().id).isEqualTo(francisFordCoppola.id);
sortValues = searchHits.getSearchHit(1).getSortValues(); sortValues = searchHits.getSearchHit(1).getSortValues();
assertThat(sortValues).hasSize(1); assertThat(sortValues).hasSize(1);
assertThat(sortValues.get(0)).isEqualTo("1940"); assertThat(sortValues.get(0)).isEqualTo(1940L);
} }
@Document(indexName = "#{@indexNameProvider.indexName()}") @Document(indexName = "#{@indexNameProvider.indexName()}")