diff --git a/pom.xml b/pom.xml index ae0833131..90615af98 100644 --- a/pom.xml +++ b/pom.xml @@ -21,9 +21,9 @@ 3.0.0-SNAPSHOT - 7.17.6 + 7.17.7 - 8.4.3 + 8.5.0 2.18.0 4.1.65.Final diff --git a/src/main/asciidoc/preface.adoc b/src/main/asciidoc/preface.adoc index 00e7836eb..1c4efd02e 100644 --- a/src/main/asciidoc/preface.adoc +++ b/src/main/asciidoc/preface.adoc @@ -37,7 +37,7 @@ built and tested. [cols="^,^,^,^,^",options="header"] |=== | Spring Data Release Train | Spring Data Elasticsearch | Elasticsearch | Spring Framework | Spring Boot -| 2022.0 (Turing) | 5.0.x | 8.4.3 | 6.0.x | 3.0.x? +| 2022.0 (Turing) | 5.0.x | 8.5.0 | 6.0.x | 3.0.x? | 2021.2 (Raj) | 4.4.x | 7.17.3 | 5.3.x | 2.7.x | 2021.1 (Q) | 4.3.x | 7.15.2 | 5.3.x | 2.6.x | 2021.0 (Pascal) | 4.2.xfootnote:oom[Out of maintenance] | 7.12.0 | 5.3.x | 2.5.x diff --git a/src/main/asciidoc/reference/elasticsearch-migration-guide-4.4-5.0.adoc b/src/main/asciidoc/reference/elasticsearch-migration-guide-4.4-5.0.adoc index 58cf38dfa..ad73fa029 100644 --- a/src/main/asciidoc/reference/elasticsearch-migration-guide-4.4-5.0.adoc +++ b/src/main/asciidoc/reference/elasticsearch-migration-guide-4.4-5.0.adoc @@ -159,4 +159,4 @@ The old deprecated `RestHighLevelClient` can still be used, but you will need to ---- ==== -Make sure to specify the version 7.17.6 explicitly, otherwise maven will resolve to 8.4.3, and this does not exist. +Make sure to specify the version 7.17.6 explicitly, otherwise maven will resolve to 8.5.0, and this does not exist. diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/DocumentAdapters.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/DocumentAdapters.java index 0e41d8c67..b6019b12d 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/DocumentAdapters.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/DocumentAdapters.java @@ -138,8 +138,8 @@ public static SearchDocument from(Hit hit, JsonpMapper jsonpMapper) { 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().toArray(new String[0]), documentFields, - highlightFields, innerHits, nestedMetaData, explanation, matchedQueries, hit.routing()); + return new SearchDocumentAdapter(document, score, hit.sort().stream().map(TypeUtils::toString).toArray(), + documentFields, highlightFields, innerHits, nestedMetaData, explanation, matchedQueries, hit.routing()); } public static SearchDocument from(CompletionSuggestOption completionSuggestOption) { diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java index 7d96d3b05..262483e06 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java @@ -19,6 +19,7 @@ import static org.springframework.util.CollectionUtils.*; import co.elastic.clients.elasticsearch._types.Conflicts; +import co.elastic.clients.elasticsearch._types.FieldValue; import co.elastic.clients.elasticsearch._types.InlineScript; import co.elastic.clients.elasticsearch._types.OpType; import co.elastic.clients.elasticsearch._types.SortOptions; @@ -735,7 +736,7 @@ public co.elastic.clients.elasticsearch.core.ReindexRequest reindex(ReindexReque ReindexRequest.Slice slice = source.getSlice(); if (slice != null) { - s.slice(sl -> sl.id(slice.getId()).max(slice.getMax())); + s.slice(sl -> sl.id(String.valueOf(slice.getId())).max(slice.getMax())); } if (source.getQuery() != null) { @@ -1100,7 +1101,8 @@ public MsearchRequest searchMsearchRequest( } if (!isEmpty(query.getSearchAfter())) { - bb.searchAfter(query.getSearchAfter().stream().map(Object::toString).collect(Collectors.toList())); + bb.searchAfter(query.getSearchAfter().stream().map(it -> FieldValue.of(it.toString())) + .collect(Collectors.toList())); } query.getRescorerQueries().forEach(rescorerQuery -> bb.rescore(getRescore(rescorerQuery))); @@ -1241,7 +1243,8 @@ private void prepareSearchRequest(Query query, @Nullable Class clazz, Ind } if (!isEmpty(query.getSearchAfter())) { - builder.searchAfter(query.getSearchAfter().stream().map(Object::toString).collect(Collectors.toList())); + builder.searchAfter( + query.getSearchAfter().stream().map(it -> FieldValue.of(it.toString())).collect(Collectors.toList())); } query.getRescorerQueries().forEach(rescorerQuery -> builder.rescore(getRescore(rescorerQuery))); diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/TypeUtils.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/TypeUtils.java index f4d2c7741..346a125ae 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/TypeUtils.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/TypeUtils.java @@ -95,6 +95,37 @@ static FieldType fieldType(String type) { return null; } + @Nullable + static String toString(@Nullable FieldValue fieldValue) { + + if (fieldValue == null) { + return null; + } + + switch (fieldValue._kind()) { + case Double -> { + return String.valueOf(fieldValue.doubleValue()); + } + case Long -> { + return String.valueOf(fieldValue.longValue()); + } + case Boolean -> { + return String.valueOf(fieldValue.booleanValue()); + } + case String -> { + return fieldValue.stringValue(); + } + case Null -> { + return null; + } + case Any -> { + return fieldValue.anyValue().toString(); + } + + default -> throw new IllegalStateException("Unexpected value: " + fieldValue._kind()); + } + } + @Nullable static GeoDistanceType geoDistanceType(GeoDistanceOrder.DistanceType distanceType) { diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchELCIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchELCIntegrationTests.java index 75e74b070..6c43eaf42 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchELCIntegrationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchELCIntegrationTests.java @@ -104,15 +104,15 @@ protected > void assertThatAggregationsAreCorr assertThat(bucketList.size()).isEqualTo(3); AtomicInteger count = new AtomicInteger(); bucketList.forEach(stringTermsBucket -> { - if ("message".equals(stringTermsBucket.key())) { + if ("message".equals(stringTermsBucket.key().stringValue())) { count.getAndIncrement(); assertThat(stringTermsBucket.docCount()).isEqualTo(3); } - if ("some".equals(stringTermsBucket.key())) { + if ("some".equals(stringTermsBucket.key().stringValue())) { count.getAndIncrement(); assertThat(stringTermsBucket.docCount()).isEqualTo(2); } - if ("other".equals(stringTermsBucket.key())) { + if ("other".equals(stringTermsBucket.key().stringValue())) { count.getAndIncrement(); assertThat(stringTermsBucket.docCount()).isEqualTo(1); } diff --git a/src/test/java/org/springframework/data/elasticsearch/repository/query/keywords/QueryKeywordsIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/repository/query/keywords/QueryKeywordsIntegrationTests.java index ecadcc9f4..6583b3176 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repository/query/keywords/QueryKeywordsIntegrationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repository/query/keywords/QueryKeywordsIntegrationTests.java @@ -266,7 +266,6 @@ void shouldReturnEmptyListOnDerivedMethodWithEmptyInputList() { assertThat(products).isEmpty(); } - @Disabled("issue #2300, Elasticsearch bug https://github.com/elastic/elasticsearch/issues/89760") @Test // #1909 @DisplayName("should find by property exists") void shouldFindByPropertyExists() { @@ -276,7 +275,6 @@ void shouldFindByPropertyExists() { assertThat(searchHits.getTotalHits()).isEqualTo(6); } - @Disabled("issue #2300, Elasticsearch bug https://github.com/elastic/elasticsearch/issues/89760") @Test // #1909 @DisplayName("should find by property is not null") void shouldFindByPropertyIsNotNull() { diff --git a/src/test/resources/testcontainers-elasticsearch.properties b/src/test/resources/testcontainers-elasticsearch.properties index 226bf0b0a..6219c1501 100644 --- a/src/test/resources/testcontainers-elasticsearch.properties +++ b/src/test/resources/testcontainers-elasticsearch.properties @@ -15,7 +15,7 @@ # # sde.testcontainers.image-name=docker.elastic.co/elasticsearch/elasticsearch -sde.testcontainers.image-version=8.4.3 +sde.testcontainers.image-version=8.5.0 # # # needed as we do a DELETE /* at the end of the tests, will be required from 8.0 on, produces a warning since 7.13