diff --git a/src/main/asciidoc/reference/elasticsearch-migration-guide-5.0-5.1.adoc b/src/main/asciidoc/reference/elasticsearch-migration-guide-5.0-5.1.adoc new file mode 100644 index 000000000..113b2643a --- /dev/null +++ b/src/main/asciidoc/reference/elasticsearch-migration-guide-5.0-5.1.adoc @@ -0,0 +1,11 @@ +[[elasticsearch-migration-guide-5.0-5.1]] += Upgrading from 5.0.x to 5.1.x + +This section describes breaking changes from version 5.0.x to 5.1.x and how removed features can be replaced by new introduced features. + +[[elasticsearch-migration-guide-5.0-5.1.breaking-changes]] +== Breaking Changes + +In the `org.springframework.data.elasticsearch.core.index.AliasData` class, which is used for alias information +returned from Elasticsearch, the property `filter` (of type `Document`) is replaced by `filterQuery` which is of type +`org.springframework.data.elasticsearch.core.query.Query`. diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/ResponseConverter.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/ResponseConverter.java index 5cfbb080b..3e5c9f3a1 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/ResponseConverter.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/ResponseConverter.java @@ -15,7 +15,7 @@ */ package org.springframework.data.elasticsearch.client.elc; -import static org.springframework.data.elasticsearch.client.elc.JsonUtils.*; +import static org.springframework.data.elasticsearch.client.elc.JsonUtils.toJson; import co.elastic.clients.elasticsearch._types.BulkIndexByScrollFailure; import co.elastic.clients.elasticsearch._types.ErrorCause; @@ -26,7 +26,16 @@ import co.elastic.clients.elasticsearch.core.DeleteByQueryResponse; import co.elastic.clients.elasticsearch.core.UpdateByQueryResponse; import co.elastic.clients.elasticsearch.core.mget.MultiGetError; import co.elastic.clients.elasticsearch.core.mget.MultiGetResponseItem; -import co.elastic.clients.elasticsearch.indices.*; +import co.elastic.clients.elasticsearch.indices.Alias; +import co.elastic.clients.elasticsearch.indices.AliasDefinition; +import co.elastic.clients.elasticsearch.indices.GetAliasResponse; +import co.elastic.clients.elasticsearch.indices.GetIndexResponse; +import co.elastic.clients.elasticsearch.indices.GetIndicesSettingsResponse; +import co.elastic.clients.elasticsearch.indices.GetMappingResponse; +import co.elastic.clients.elasticsearch.indices.GetTemplateResponse; +import co.elastic.clients.elasticsearch.indices.IndexSettings; +import co.elastic.clients.elasticsearch.indices.IndexState; +import co.elastic.clients.elasticsearch.indices.TemplateMapping; import co.elastic.clients.elasticsearch.indices.get_mapping.IndexMappingRecord; import co.elastic.clients.json.JsonpMapper; @@ -51,6 +60,7 @@ import org.springframework.data.elasticsearch.core.index.Settings; import org.springframework.data.elasticsearch.core.index.TemplateData; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.data.elasticsearch.core.query.ByQueryResponse; +import org.springframework.data.elasticsearch.core.query.StringQuery; import org.springframework.data.elasticsearch.core.reindex.ReindexResponse; import org.springframework.data.elasticsearch.support.DefaultStringObjectMap; import org.springframework.lang.Nullable; @@ -190,18 +200,19 @@ class ResponseConverter { } private AliasData indicesGetAliasData(String aliasName, Alias alias) { + Query filter = alias.filter(); String filterJson = filter != null ? toJson(filter, jsonpMapper) : null; - Document filterDocument = filterJson != null ? Document.parse(filterJson) : null; - return AliasData.of(aliasName, filterDocument, alias.indexRouting(), alias.searchRouting(), alias.isWriteIndex(), + var filterQuery = filterJson != null ? StringQuery.builder(filterJson).build() : null; + return AliasData.of(aliasName, filterQuery, alias.indexRouting(), alias.searchRouting(), alias.isWriteIndex(), alias.isHidden()); } private AliasData indicesGetAliasData(String aliasName, AliasDefinition alias) { Query filter = alias.filter(); String filterJson = filter != null ? toJson(filter, jsonpMapper) : null; - Document filterDocument = filterJson != null ? Document.parse(filterJson) : null; - return AliasData.of(aliasName, filterDocument, alias.indexRouting(), alias.searchRouting(), alias.isWriteIndex(), + var filterQuery = filterJson != null ? StringQuery.builder(filterJson).build() : null; + return AliasData.of(aliasName, filterQuery, alias.indexRouting(), alias.searchRouting(), alias.isWriteIndex(), null); } @@ -280,7 +291,7 @@ class ResponseConverter { .withThrottledMillis(reindexResponse.throttledMillis()) // .withRequestsPerSecond(reindexResponse.requestsPerSecond()) // .withThrottledUntilMillis(reindexResponse.throttledUntilMillis()) // - .withFailures(failures) // + .withFailures(failures) // .build(); } diff --git a/src/main/java/org/springframework/data/elasticsearch/client/erhlc/ResponseConverter.java b/src/main/java/org/springframework/data/elasticsearch/client/erhlc/ResponseConverter.java index 618ccadea..f82aaeaa0 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/erhlc/ResponseConverter.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/erhlc/ResponseConverter.java @@ -48,6 +48,8 @@ import org.springframework.data.elasticsearch.core.index.AliasData; import org.springframework.data.elasticsearch.core.index.Settings; import org.springframework.data.elasticsearch.core.index.TemplateData; import org.springframework.data.elasticsearch.core.query.ByQueryResponse; +import org.springframework.data.elasticsearch.core.query.Query; +import org.springframework.data.elasticsearch.core.query.StringQuery; import org.springframework.data.elasticsearch.core.reindex.ReindexResponse; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -78,14 +80,12 @@ public class ResponseConverter { } public static AliasData toAliasData(AliasMetadata aliasMetaData) { - Document filter = null; - CompressedXContent aliasMetaDataFilter = aliasMetaData.getFilter(); - if (aliasMetaDataFilter != null) { - filter = Document.parse(aliasMetaDataFilter.string()); - } - return AliasData.of(aliasMetaData.alias(), filter, aliasMetaData.indexRouting(), aliasMetaData.getSearchRouting(), - aliasMetaData.writeIndex(), aliasMetaData.isHidden()); + CompressedXContent aliasMetaDataFilter = aliasMetaData.getFilter(); + Query filterQuery = (aliasMetaDataFilter != null) ? StringQuery.builder(aliasMetaDataFilter.string()).build() + : null; + return AliasData.of(aliasMetaData.alias(), filterQuery, aliasMetaData.indexRouting(), + aliasMetaData.getSearchRouting(), aliasMetaData.writeIndex(), aliasMetaData.isHidden()); } // endregion diff --git a/src/main/java/org/springframework/data/elasticsearch/core/index/AliasData.java b/src/main/java/org/springframework/data/elasticsearch/core/index/AliasData.java index 1217c8c58..459aacd44 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/index/AliasData.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/index/AliasData.java @@ -15,7 +15,7 @@ */ package org.springframework.data.elasticsearch.core.index; -import org.springframework.data.elasticsearch.core.document.Document; +import org.springframework.data.elasticsearch.core.query.Query; import org.springframework.lang.Nullable; /** @@ -24,34 +24,35 @@ import org.springframework.lang.Nullable; * @author Peter-Josef Meisch */ public class AliasData { - private String alias; - @Nullable Document filter; - @Nullable private String indexRouting; - @Nullable private String searchRouting; - @Nullable private Boolean isWriteIndex; - @Nullable private Boolean isHidden; + private final String alias; + @Nullable private final Query filterQuery; + @Nullable private final String indexRouting; + @Nullable private final String searchRouting; + @Nullable private final Boolean isWriteIndex; + @Nullable private final Boolean isHidden; - private AliasData(String alias, @Nullable Document filter, @Nullable String indexRouting, - @Nullable String searchRouting, Boolean isWriteIndex, Boolean isHidden) { + private AliasData(String alias, @Nullable Query filterQuery, @Nullable String indexRouting, + @Nullable String searchRouting, @Nullable Boolean isWriteIndex, @Nullable Boolean isHidden) { this.alias = alias; - this.filter = filter; + this.filterQuery = filterQuery; this.indexRouting = indexRouting; this.searchRouting = searchRouting; this.isWriteIndex = isWriteIndex; this.isHidden = isHidden; } - public static AliasData of(String alias, @Nullable Document filter, @Nullable String indexRouting, + public static AliasData of(String alias, @Nullable Query filterQuery, @Nullable String indexRouting, @Nullable String searchRouting, @Nullable Boolean isWriteIndex, @Nullable Boolean isHidden) { - return new AliasData(alias, filter, indexRouting, searchRouting, isWriteIndex, isHidden); + return new AliasData(alias, filterQuery, indexRouting, searchRouting, isWriteIndex, isHidden); } public String getAlias() { return alias; } - public Document getFilter() { - return filter; + @Nullable + public Query getFilterQuery() { + return filterQuery; } @Nullable diff --git a/src/test/java/org/springframework/data/elasticsearch/core/index/IndexTemplateIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/index/IndexTemplateIntegrationTests.java index 6bae8d826..d340a128d 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/index/IndexTemplateIntegrationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/index/IndexTemplateIntegrationTests.java @@ -15,8 +15,8 @@ */ package org.springframework.data.elasticsearch.core.index; -import static org.assertj.core.api.Assertions.*; -import static org.skyscreamer.jsonassert.JSONAssert.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.skyscreamer.jsonassert.JSONAssert.assertEquals; import java.util.Map; import java.util.UUID; @@ -35,6 +35,8 @@ import org.springframework.data.elasticsearch.core.AbstractElasticsearchTemplate import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.IndexOperations; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; +import org.springframework.data.elasticsearch.core.query.Criteria; +import org.springframework.data.elasticsearch.core.query.CriteriaQuery; import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest; import org.springframework.lang.Nullable; @@ -86,15 +88,19 @@ public abstract class IndexTemplateIntegrationTests implements NewElasticsearchC } @DisabledIf(value = "rhlcWithCluster8", disabledReason = "RHLC fails to parse response from ES 8.2") - @Test // DATAES-612 + @Test // DATAES-612, #2073 void shouldGetTemplate() throws JSONException { IndexOperations indexOps = operations.indexOps(IndexCoordinates.of("dont-care")); org.springframework.data.elasticsearch.core.document.Document mapping = indexOps.createMapping(TemplateClass.class); Settings settings = indexOps.createSettings(TemplateClass.class); - AliasActions aliasActions = new AliasActions( - new AliasAction.Add(AliasActionParameters.builderForTemplate().withAliases("alias1", "alias2").build())); + var filterQuery = CriteriaQuery.builder(Criteria.where("message").is("foo")).build(); + AliasActions aliasActions = new AliasActions(new AliasAction.Add(AliasActionParameters.builderForTemplate() // + .withAliases("alias1", "alias2") // + .withFilterQuery(filterQuery, TemplateClass.class)// + .build())); + PutTemplateRequest putTemplateRequest = PutTemplateRequest.builder("test-template", "log-*") // .withSettings(settings) // .withMappings(mapping) // @@ -117,7 +123,9 @@ public abstract class IndexTemplateIntegrationTests implements NewElasticsearchC assertThat(aliases).hasSize(2); AliasData alias1 = aliases.get("alias1"); assertThat(alias1.getAlias()).isEqualTo("alias1"); + assertThat(alias1.getFilterQuery()).isNotNull(); AliasData alias2 = aliases.get("alias2"); + assertThat(alias2.getFilterQuery()).isNotNull(); assertThat(alias2.getAlias()).isEqualTo("alias2"); assertThat(templateData.getOrder()).isEqualTo(putTemplateRequest.getOrder()); assertThat(templateData.getVersion()).isEqualTo(putTemplateRequest.getVersion());