Skip to content

Fix putMapping request creation #2483

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.StringReader;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.ArrayList;
Expand Down Expand Up @@ -144,14 +145,12 @@ public CreateIndexRequest indicesCreateRequest(IndexCoordinates indexCoordinates
createRequestBuilder.index(indexCoordinates.getIndexName());

// note: the new client does not support the index.storeType anymore
String settingsJson = Document.from(settings).toJson();
IndexSettings indexSettings = fromJson(settingsJson, IndexSettings._DESERIALIZER);
createRequestBuilder.settings(indexSettings);
createRequestBuilder.settings(IndexSettings.of(b -> b //
.withJson(new StringReader(Document.from(settings).toJson()))));

if (mapping != null) {
String mappingJson = mapping.toJson();
TypeMapping typeMapping = fromJson(mappingJson, TypeMapping._DESERIALIZER);
createRequestBuilder.mappings(typeMapping);
createRequestBuilder.mappings(TypeMapping.of(b -> b //
.withJson(new StringReader(mapping.toJson()))));
}

return createRequestBuilder.build();
Expand Down Expand Up @@ -243,11 +242,12 @@ public PutMappingRequest indicesPutMappingRequest(IndexCoordinates indexCoordina
Assert.notNull(indexCoordinates, "indexCoordinates must not be null");
Assert.notNull(mapping, "mapping must not be null");

PutMappingRequest.Builder builder = new PutMappingRequest.Builder();
builder.index(Arrays.asList(indexCoordinates.getIndexNames()));
addPropertiesToMapping(builder, mapping);
PutMappingRequest request = new PutMappingRequest.Builder() //
.withJson(new StringReader(mapping.toJson())) //
.index(Arrays.asList(indexCoordinates.getIndexNames())) //
.build();

return builder.build();
return request;
}

public GetMappingRequest indicesGetMappingRequest(IndexCoordinates indexCoordinates) {
Expand All @@ -257,23 +257,6 @@ public GetMappingRequest indicesGetMappingRequest(IndexCoordinates indexCoordina
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) {
// noinspection SpellCheckingInspection
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,16 @@
import org.springframework.context.annotation.Import;
import org.springframework.data.annotation.Id;
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.IndexOperations;
import org.springframework.data.elasticsearch.core.MappingContextBaseTests;
Expand Down Expand Up @@ -205,11 +214,37 @@ void shouldWriteMappingForDisabledProperty() {
}

@Test // #1767
@DisplayName("should write dynamic mapping annotations")
void shouldWriteDynamicMappingAnnotations() {
@DisplayName("should write dynamic mapping annotations on create")
void shouldWriteDynamicMappingAnnotationsOnCreate() {

IndexOperations indexOps = operations.indexOps(DynamicMappingAnnotationEntity.class);
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
Expand Down