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;
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();
}

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

View File

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

View File

@ -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());