Fix putMapping request creation .

Original Pull Request #2483
Closes #2487
This commit is contained in:
Peter-Josef Meisch 2023-02-26 15:41:12 +01:00 committed by GitHub
parent e7c9bf20f6
commit 63cebd7038
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 48 additions and 30 deletions

View File

@ -55,6 +55,7 @@ import jakarta.json.stream.JsonParser;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.StringReader;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.time.Duration; import java.time.Duration;
import java.util.ArrayList; import java.util.ArrayList;
@ -144,14 +145,12 @@ class RequestConverter {
createRequestBuilder.index(indexCoordinates.getIndexName()); createRequestBuilder.index(indexCoordinates.getIndexName());
// note: the new client does not support the index.storeType anymore // note: the new client does not support the index.storeType anymore
String settingsJson = Document.from(settings).toJson(); createRequestBuilder.settings(IndexSettings.of(b -> b //
IndexSettings indexSettings = fromJson(settingsJson, IndexSettings._DESERIALIZER); .withJson(new StringReader(Document.from(settings).toJson()))));
createRequestBuilder.settings(indexSettings);
if (mapping != null) { if (mapping != null) {
String mappingJson = mapping.toJson(); createRequestBuilder.mappings(TypeMapping.of(b -> b //
TypeMapping typeMapping = fromJson(mappingJson, TypeMapping._DESERIALIZER); .withJson(new StringReader(mapping.toJson()))));
createRequestBuilder.mappings(typeMapping);
} }
return createRequestBuilder.build(); return createRequestBuilder.build();
@ -243,11 +242,12 @@ class RequestConverter {
Assert.notNull(indexCoordinates, "indexCoordinates must not be null"); Assert.notNull(indexCoordinates, "indexCoordinates must not be null");
Assert.notNull(mapping, "mapping must not be null"); Assert.notNull(mapping, "mapping must not be null");
PutMappingRequest.Builder builder = new PutMappingRequest.Builder(); PutMappingRequest request = new PutMappingRequest.Builder() //
builder.index(Arrays.asList(indexCoordinates.getIndexNames())); .withJson(new StringReader(mapping.toJson())) //
addPropertiesToMapping(builder, mapping); .index(Arrays.asList(indexCoordinates.getIndexNames())) //
.build();
return builder.build(); return request;
} }
public GetMappingRequest indicesGetMappingRequest(IndexCoordinates indexCoordinates) { public GetMappingRequest indicesGetMappingRequest(IndexCoordinates indexCoordinates) {
@ -257,23 +257,6 @@ class RequestConverter {
return new GetMappingRequest.Builder().index(Arrays.asList(indexCoordinates.getIndexNames())).build(); return new GetMappingRequest.Builder().index(Arrays.asList(indexCoordinates.getIndexNames())).build();
} }
private void addPropertiesToMapping(PutMappingRequest.Builder builder, Document mapping) {
Object properties = mapping.get("properties");
if (properties != null) {
if (properties instanceof Map) {
Map<String, Property> propertiesMap = new HashMap<>();
// noinspection unchecked
((Map<String, Object>) properties).forEach((key, value) -> {
Property property = getProperty(value);
propertiesMap.put(key, property);
});
builder.properties(propertiesMap);
}
}
}
private Property getProperty(Object value) { private Property getProperty(Object value) {
// noinspection SpellCheckingInspection // noinspection SpellCheckingInspection
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();

View File

@ -43,7 +43,16 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.NewElasticsearchClientDevelopment; import org.springframework.data.elasticsearch.NewElasticsearchClientDevelopment;
import org.springframework.data.elasticsearch.annotations.*; import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Dynamic;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.data.elasticsearch.annotations.InnerField;
import org.springframework.data.elasticsearch.annotations.Mapping;
import org.springframework.data.elasticsearch.annotations.MultiField;
import org.springframework.data.elasticsearch.annotations.Setting;
import org.springframework.data.elasticsearch.annotations.TermVector;
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.MappingContextBaseTests; import org.springframework.data.elasticsearch.core.MappingContextBaseTests;
@ -205,11 +214,37 @@ public abstract class MappingBuilderIntegrationTests extends MappingContextBaseT
} }
@Test // #1767 @Test // #1767
@DisplayName("should write dynamic mapping annotations") @DisplayName("should write dynamic mapping annotations on create")
void shouldWriteDynamicMappingAnnotations() { void shouldWriteDynamicMappingAnnotationsOnCreate() {
IndexOperations indexOps = operations.indexOps(DynamicMappingAnnotationEntity.class); IndexOperations indexOps = operations.indexOps(DynamicMappingAnnotationEntity.class);
indexOps.createWithMapping(); indexOps.createWithMapping();
var mapping = indexOps.getMapping();
var dynamic = mapping.get("dynamic");
if (dynamic instanceof String s) {
assertThat(dynamic).isEqualTo("false");
} else {
assertThat(mapping.get("dynamic")).isEqualTo(false);
}
}
@Test // #2478
@DisplayName("should write dynamic mapping annotations on put")
void shouldWriteDynamicMappingAnnotationsOnPut() {
IndexOperations indexOps = operations.indexOps(DynamicMappingAnnotationEntity.class);
indexOps.create();
indexOps.putMapping();
var mapping = indexOps.getMapping();
var dynamic = mapping.get("dynamic");
if (dynamic instanceof String s) {
assertThat(dynamic).isEqualTo("false");
} else {
assertThat(mapping.get("dynamic")).isEqualTo(false);
}
} }
@Test // #1871 @Test // #1871