Skip to content

Commit 63cebd7

Browse files
authored
Fix putMapping request creation .
Original Pull Request spring-projects#2483 Closes spring-projects#2487
1 parent e7c9bf2 commit 63cebd7

File tree

2 files changed

+48
-30
lines changed

2 files changed

+48
-30
lines changed

src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java

+10-27
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555

5656
import java.io.ByteArrayInputStream;
5757
import java.io.ByteArrayOutputStream;
58+
import java.io.StringReader;
5859
import java.nio.charset.StandardCharsets;
5960
import java.time.Duration;
6061
import java.util.ArrayList;
@@ -144,14 +145,12 @@ public CreateIndexRequest indicesCreateRequest(IndexCoordinates indexCoordinates
144145
createRequestBuilder.index(indexCoordinates.getIndexName());
145146

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

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

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

246-
PutMappingRequest.Builder builder = new PutMappingRequest.Builder();
247-
builder.index(Arrays.asList(indexCoordinates.getIndexNames()));
248-
addPropertiesToMapping(builder, mapping);
245+
PutMappingRequest request = new PutMappingRequest.Builder() //
246+
.withJson(new StringReader(mapping.toJson())) //
247+
.index(Arrays.asList(indexCoordinates.getIndexNames())) //
248+
.build();
249249

250-
return builder.build();
250+
return request;
251251
}
252252

253253
public GetMappingRequest indicesGetMappingRequest(IndexCoordinates indexCoordinates) {
@@ -257,23 +257,6 @@ public GetMappingRequest indicesGetMappingRequest(IndexCoordinates indexCoordina
257257
return new GetMappingRequest.Builder().index(Arrays.asList(indexCoordinates.getIndexNames())).build();
258258
}
259259

260-
private void addPropertiesToMapping(PutMappingRequest.Builder builder, Document mapping) {
261-
Object properties = mapping.get("properties");
262-
263-
if (properties != null) {
264-
265-
if (properties instanceof Map) {
266-
Map<String, Property> propertiesMap = new HashMap<>();
267-
// noinspection unchecked
268-
((Map<String, Object>) properties).forEach((key, value) -> {
269-
Property property = getProperty(value);
270-
propertiesMap.put(key, property);
271-
});
272-
builder.properties(propertiesMap);
273-
}
274-
}
275-
}
276-
277260
private Property getProperty(Object value) {
278261
// noinspection SpellCheckingInspection
279262
ByteArrayOutputStream baos = new ByteArrayOutputStream();

src/test/java/org/springframework/data/elasticsearch/core/index/MappingBuilderIntegrationTests.java

+38-3
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,16 @@
4343
import org.springframework.context.annotation.Import;
4444
import org.springframework.data.annotation.Id;
4545
import org.springframework.data.elasticsearch.NewElasticsearchClientDevelopment;
46-
import org.springframework.data.elasticsearch.annotations.*;
46+
import org.springframework.data.elasticsearch.annotations.DateFormat;
47+
import org.springframework.data.elasticsearch.annotations.Document;
48+
import org.springframework.data.elasticsearch.annotations.Dynamic;
49+
import org.springframework.data.elasticsearch.annotations.Field;
50+
import org.springframework.data.elasticsearch.annotations.FieldType;
51+
import org.springframework.data.elasticsearch.annotations.InnerField;
52+
import org.springframework.data.elasticsearch.annotations.Mapping;
53+
import org.springframework.data.elasticsearch.annotations.MultiField;
54+
import org.springframework.data.elasticsearch.annotations.Setting;
55+
import org.springframework.data.elasticsearch.annotations.TermVector;
4756
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
4857
import org.springframework.data.elasticsearch.core.IndexOperations;
4958
import org.springframework.data.elasticsearch.core.MappingContextBaseTests;
@@ -205,11 +214,37 @@ void shouldWriteMappingForDisabledProperty() {
205214
}
206215

207216
@Test // #1767
208-
@DisplayName("should write dynamic mapping annotations")
209-
void shouldWriteDynamicMappingAnnotations() {
217+
@DisplayName("should write dynamic mapping annotations on create")
218+
void shouldWriteDynamicMappingAnnotationsOnCreate() {
210219

211220
IndexOperations indexOps = operations.indexOps(DynamicMappingAnnotationEntity.class);
212221
indexOps.createWithMapping();
222+
223+
var mapping = indexOps.getMapping();
224+
var dynamic = mapping.get("dynamic");
225+
if (dynamic instanceof String s) {
226+
assertThat(dynamic).isEqualTo("false");
227+
} else {
228+
assertThat(mapping.get("dynamic")).isEqualTo(false);
229+
}
230+
}
231+
232+
@Test // #2478
233+
@DisplayName("should write dynamic mapping annotations on put")
234+
void shouldWriteDynamicMappingAnnotationsOnPut() {
235+
236+
IndexOperations indexOps = operations.indexOps(DynamicMappingAnnotationEntity.class);
237+
indexOps.create();
238+
239+
indexOps.putMapping();
240+
241+
var mapping = indexOps.getMapping();
242+
var dynamic = mapping.get("dynamic");
243+
if (dynamic instanceof String s) {
244+
assertThat(dynamic).isEqualTo("false");
245+
} else {
246+
assertThat(mapping.get("dynamic")).isEqualTo(false);
247+
}
213248
}
214249

215250
@Test // #1871

0 commit comments

Comments
 (0)