Change AliasData filter property to Query.

Original Pull Request #2374
Closes #2073
This commit is contained in:
Peter-Josef Meisch 2022-11-19 19:38:26 +01:00 committed by GitHub
parent 9f63369c4b
commit f6c6f64f04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 64 additions and 33 deletions

View File

@ -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`.

View File

@ -15,7 +15,7 @@
*/ */
package org.springframework.data.elasticsearch.client.elc; 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.BulkIndexByScrollFailure;
import co.elastic.clients.elasticsearch._types.ErrorCause; 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.UpdateByQueryResponse;
import co.elastic.clients.elasticsearch.core.mget.MultiGetError; import co.elastic.clients.elasticsearch.core.mget.MultiGetError;
import co.elastic.clients.elasticsearch.core.mget.MultiGetResponseItem; 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.elasticsearch.indices.get_mapping.IndexMappingRecord;
import co.elastic.clients.json.JsonpMapper; 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.index.TemplateData;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.ByQueryResponse; 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.core.reindex.ReindexResponse;
import org.springframework.data.elasticsearch.support.DefaultStringObjectMap; import org.springframework.data.elasticsearch.support.DefaultStringObjectMap;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
@ -190,18 +200,19 @@ class ResponseConverter {
} }
private AliasData indicesGetAliasData(String aliasName, Alias alias) { private AliasData indicesGetAliasData(String aliasName, Alias alias) {
Query filter = alias.filter(); Query filter = alias.filter();
String filterJson = filter != null ? toJson(filter, jsonpMapper) : null; String filterJson = filter != null ? toJson(filter, jsonpMapper) : null;
Document filterDocument = filterJson != null ? Document.parse(filterJson) : null; var filterQuery = filterJson != null ? StringQuery.builder(filterJson).build() : null;
return AliasData.of(aliasName, filterDocument, alias.indexRouting(), alias.searchRouting(), alias.isWriteIndex(), return AliasData.of(aliasName, filterQuery, alias.indexRouting(), alias.searchRouting(), alias.isWriteIndex(),
alias.isHidden()); alias.isHidden());
} }
private AliasData indicesGetAliasData(String aliasName, AliasDefinition alias) { private AliasData indicesGetAliasData(String aliasName, AliasDefinition alias) {
Query filter = alias.filter(); Query filter = alias.filter();
String filterJson = filter != null ? toJson(filter, jsonpMapper) : null; String filterJson = filter != null ? toJson(filter, jsonpMapper) : null;
Document filterDocument = filterJson != null ? Document.parse(filterJson) : null; var filterQuery = filterJson != null ? StringQuery.builder(filterJson).build() : null;
return AliasData.of(aliasName, filterDocument, alias.indexRouting(), alias.searchRouting(), alias.isWriteIndex(), return AliasData.of(aliasName, filterQuery, alias.indexRouting(), alias.searchRouting(), alias.isWriteIndex(),
null); null);
} }

View File

@ -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.Settings;
import org.springframework.data.elasticsearch.core.index.TemplateData; import org.springframework.data.elasticsearch.core.index.TemplateData;
import org.springframework.data.elasticsearch.core.query.ByQueryResponse; 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.data.elasticsearch.core.reindex.ReindexResponse;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
@ -78,14 +80,12 @@ public class ResponseConverter {
} }
public static AliasData toAliasData(AliasMetadata aliasMetaData) { public static AliasData toAliasData(AliasMetadata aliasMetaData) {
Document filter = null;
CompressedXContent aliasMetaDataFilter = aliasMetaData.getFilter();
if (aliasMetaDataFilter != null) { CompressedXContent aliasMetaDataFilter = aliasMetaData.getFilter();
filter = Document.parse(aliasMetaDataFilter.string()); Query filterQuery = (aliasMetaDataFilter != null) ? StringQuery.builder(aliasMetaDataFilter.string()).build()
} : null;
return AliasData.of(aliasMetaData.alias(), filter, aliasMetaData.indexRouting(), aliasMetaData.getSearchRouting(), return AliasData.of(aliasMetaData.alias(), filterQuery, aliasMetaData.indexRouting(),
aliasMetaData.writeIndex(), aliasMetaData.isHidden()); aliasMetaData.getSearchRouting(), aliasMetaData.writeIndex(), aliasMetaData.isHidden());
} }
// endregion // endregion

View File

@ -15,7 +15,7 @@
*/ */
package org.springframework.data.elasticsearch.core.index; 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; import org.springframework.lang.Nullable;
/** /**
@ -24,34 +24,35 @@ import org.springframework.lang.Nullable;
* @author Peter-Josef Meisch * @author Peter-Josef Meisch
*/ */
public class AliasData { public class AliasData {
private String alias; private final String alias;
@Nullable Document filter; @Nullable private final Query filterQuery;
@Nullable private String indexRouting; @Nullable private final String indexRouting;
@Nullable private String searchRouting; @Nullable private final String searchRouting;
@Nullable private Boolean isWriteIndex; @Nullable private final Boolean isWriteIndex;
@Nullable private Boolean isHidden; @Nullable private final Boolean isHidden;
private AliasData(String alias, @Nullable Document filter, @Nullable String indexRouting, private AliasData(String alias, @Nullable Query filterQuery, @Nullable String indexRouting,
@Nullable String searchRouting, Boolean isWriteIndex, Boolean isHidden) { @Nullable String searchRouting, @Nullable Boolean isWriteIndex, @Nullable Boolean isHidden) {
this.alias = alias; this.alias = alias;
this.filter = filter; this.filterQuery = filterQuery;
this.indexRouting = indexRouting; this.indexRouting = indexRouting;
this.searchRouting = searchRouting; this.searchRouting = searchRouting;
this.isWriteIndex = isWriteIndex; this.isWriteIndex = isWriteIndex;
this.isHidden = isHidden; 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) { @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() { public String getAlias() {
return alias; return alias;
} }
public Document getFilter() { @Nullable
return filter; public Query getFilterQuery() {
return filterQuery;
} }
@Nullable @Nullable

View File

@ -15,8 +15,8 @@
*/ */
package org.springframework.data.elasticsearch.core.index; package org.springframework.data.elasticsearch.core.index;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.assertThat;
import static org.skyscreamer.jsonassert.JSONAssert.*; import static org.skyscreamer.jsonassert.JSONAssert.assertEquals;
import java.util.Map; import java.util.Map;
import java.util.UUID; 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.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.IndexOperations; import org.springframework.data.elasticsearch.core.IndexOperations;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; 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.data.elasticsearch.junit.jupiter.SpringIntegrationTest;
import org.springframework.lang.Nullable; 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") @DisabledIf(value = "rhlcWithCluster8", disabledReason = "RHLC fails to parse response from ES 8.2")
@Test // DATAES-612 @Test // DATAES-612, #2073
void shouldGetTemplate() throws JSONException { void shouldGetTemplate() throws JSONException {
IndexOperations indexOps = operations.indexOps(IndexCoordinates.of("dont-care")); IndexOperations indexOps = operations.indexOps(IndexCoordinates.of("dont-care"));
org.springframework.data.elasticsearch.core.document.Document mapping = indexOps.createMapping(TemplateClass.class); org.springframework.data.elasticsearch.core.document.Document mapping = indexOps.createMapping(TemplateClass.class);
Settings settings = indexOps.createSettings(TemplateClass.class); Settings settings = indexOps.createSettings(TemplateClass.class);
AliasActions aliasActions = new AliasActions( var filterQuery = CriteriaQuery.builder(Criteria.where("message").is("foo")).build();
new AliasAction.Add(AliasActionParameters.builderForTemplate().withAliases("alias1", "alias2").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-*") // PutTemplateRequest putTemplateRequest = PutTemplateRequest.builder("test-template", "log-*") //
.withSettings(settings) // .withSettings(settings) //
.withMappings(mapping) // .withMappings(mapping) //
@ -117,7 +123,9 @@ public abstract class IndexTemplateIntegrationTests implements NewElasticsearchC
assertThat(aliases).hasSize(2); assertThat(aliases).hasSize(2);
AliasData alias1 = aliases.get("alias1"); AliasData alias1 = aliases.get("alias1");
assertThat(alias1.getAlias()).isEqualTo("alias1"); assertThat(alias1.getAlias()).isEqualTo("alias1");
assertThat(alias1.getFilterQuery()).isNotNull();
AliasData alias2 = aliases.get("alias2"); AliasData alias2 = aliases.get("alias2");
assertThat(alias2.getFilterQuery()).isNotNull();
assertThat(alias2.getAlias()).isEqualTo("alias2"); assertThat(alias2.getAlias()).isEqualTo("alias2");
assertThat(templateData.getOrder()).isEqualTo(putTemplateRequest.getOrder()); assertThat(templateData.getOrder()).isEqualTo(putTemplateRequest.getOrder());
assertThat(templateData.getVersion()).isEqualTo(putTemplateRequest.getVersion()); assertThat(templateData.getVersion()).isEqualTo(putTemplateRequest.getVersion());