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);
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());
}
@ -237,3 +237,4 @@ final class DocumentAdapters {
.collect(Collectors.toList());
}
}
🚝

View File

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