Skip to content

Commit 1b59b31

Browse files
committed
Fix FieldType mapping.
Original PullRequest #2026 Closes #2024 (cherry picked from commit f7a6a97) (cherry picked from commit f3f9ca4)
1 parent 2aba7a5 commit 1b59b31

File tree

5 files changed

+278
-115
lines changed

5 files changed

+278
-115
lines changed

Diff for: src/main/java/org/springframework/data/elasticsearch/annotations/DynamicMappingValue.java

+12-2
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,20 @@
1717

1818
/**
1919
* values for the {@link DynamicMapping annotation}
20-
*
20+
*
2121
* @author Peter-Josef Meisch
2222
* @since 4.0
2323
*/
2424
public enum DynamicMappingValue {
25-
True, False, Strict
25+
True("true"), False("false"), Strict("strict");
26+
27+
private final String mappedName;
28+
29+
DynamicMappingValue(String mappedName) {
30+
this.mappedName = mappedName;
31+
}
32+
33+
public String getMappedName() {
34+
return mappedName;
35+
}
2636
}

Diff for: src/main/java/org/springframework/data/elasticsearch/annotations/FieldType.java

+43-32
Original file line numberDiff line numberDiff line change
@@ -26,40 +26,51 @@
2626
* @author Morgan Lutz
2727
*/
2828
public enum FieldType {
29-
Auto, //
30-
Text, //
31-
Keyword, //
32-
Long, //
33-
Integer, //
34-
Short, //
35-
Byte, //
36-
Double, //
37-
Float, //
38-
Half_Float, //
39-
Scaled_Float, //
40-
Date, //
41-
Date_Nanos, //
42-
Boolean, //
43-
Binary, //
44-
Integer_Range, //
45-
Float_Range, //
46-
Long_Range, //
47-
Double_Range, //
48-
Date_Range, //
49-
Ip_Range, //
50-
Object, //
51-
Nested, //
52-
Ip, //
53-
TokenCount, //
54-
Percolator, //
55-
Flattened, //
56-
Search_As_You_Type, //
29+
Auto("auto"), //
30+
Text("text"), //
31+
Keyword("keyword"), //
32+
Long("long"), //
33+
Integer("integer"), //
34+
Short("short"), //
35+
Byte("byte"), //
36+
Double("double"), //
37+
Float("float"), //
38+
Half_Float("half_float"), //
39+
Scaled_Float("scaled_float"), //
40+
Date("date"), //
41+
Date_Nanos("date_nanos"), //
42+
Boolean("boolean"), //
43+
Binary("binary"), //
44+
Integer_Range("integer_range"), //
45+
Float_Range("float_range"), //
46+
Long_Range("long_range"), //
47+
Double_Range("double_range"), //
48+
Date_Range("date_range"), //
49+
Ip_Range("ip_range"), //
50+
Object("object"), //
51+
Nested("nested"), //
52+
Ip("ip"), //
53+
TokenCount("token_count"), //
54+
Percolator("percolator"), //
55+
Flattened("flattened"), //
56+
Search_As_You_Type("search_as_you_type"), //
5757
/** @since 4.1 */
58-
Rank_Feature, //
58+
Rank_Feature("rank_feature"), //
5959
/** @since 4.1 */
60-
Rank_Features, //
60+
Rank_Features("rank_features"), //
6161
/** since 4.2 */
62-
Wildcard, //
62+
Wildcard("wildcard"), //
6363
/** @since 4.2 */
64-
Dense_Vector //
64+
Dense_Vector("dense_vector") //
65+
;
66+
67+
private final String mappedName;
68+
69+
FieldType(String mappedName) {
70+
this.mappedName = mappedName;
71+
}
72+
73+
public String getMappedName() {
74+
return mappedName;
75+
}
6576
}

Diff for: src/main/java/org/springframework/data/elasticsearch/core/index/MappingBuilder.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,9 @@ private void mapEntity(XContentBuilder builder, @Nullable ElasticsearchPersisten
156156
boolean writeNestedProperties = !isRootObject && (isAnyPropertyAnnotatedWithField(entity) || nestedOrObjectField);
157157
if (writeNestedProperties) {
158158

159-
String type = nestedOrObjectField ? fieldType.toString().toLowerCase()
160-
: FieldType.Object.toString().toLowerCase();
161-
builder.startObject(nestedObjectFieldName).field(FIELD_PARAM_TYPE, type);
159+
String type = nestedOrObjectField ? fieldType.getMappedName() : FieldType.Object.getMappedName();
162160

161+
builder.startObject(nestedObjectFieldName).field(FIELD_PARAM_TYPE, type);
163162
if (nestedOrObjectField && FieldType.Nested == fieldType && parentFieldAnnotation != null
164163
&& parentFieldAnnotation.includeInParent()) {
165164
builder.field("include_in_parent", true);
@@ -364,7 +363,7 @@ private void applyDisabledPropertyMapping(XContentBuilder builder, Elasticsearch
364363
}
365364

366365
builder.startObject(property.getFieldName()) //
367-
.field(FIELD_PARAM_TYPE, field.type().name().toLowerCase()) //
366+
.field(FIELD_PARAM_TYPE, field.type().getMappedName()) //
368367
.field(MAPPING_ENABLED, false) //
369368
.endObject(); //
370369
} catch (Exception e) {
@@ -392,7 +391,7 @@ private void addSingleFieldMapping(XContentBuilder builder, ElasticsearchPersist
392391
builder.startObject(property.getFieldName());
393392

394393
if (nestedOrObjectField && dynamicMapping != null) {
395-
builder.field(TYPE_DYNAMIC, dynamicMapping.value().name().toLowerCase());
394+
builder.field(TYPE_DYNAMIC, dynamicMapping.value().getMappedName());
396395
}
397396

398397
addFieldMappingParameters(builder, annotation, nestedOrObjectField);
@@ -441,7 +440,7 @@ private void addMultiFieldMapping(XContentBuilder builder, ElasticsearchPersiste
441440
builder.startObject(property.getFieldName());
442441

443442
if (nestedOrObjectField && dynamicMapping != null) {
444-
builder.field(TYPE_DYNAMIC, dynamicMapping.value().name().toLowerCase());
443+
builder.field(TYPE_DYNAMIC, dynamicMapping.value().getMappedName());
445444
}
446445

447446
addFieldMappingParameters(builder, annotation.mainField(), nestedOrObjectField);

Diff for: src/main/java/org/springframework/data/elasticsearch/core/index/MappingParameters.java

+7-5
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public final class MappingParameters {
7171
static final String FIELD_PARAM_NULL_VALUE = "null_value";
7272
static final String FIELD_PARAM_POSITION_INCREMENT_GAP = "position_increment_gap";
7373
static final String FIELD_PARAM_POSITIVE_SCORE_IMPACT = "positive_score_impact";
74-
static final String FIELD_PARAM_DIMS = "dims";
74+
static final String FIELD_PARAM_DIMS = "dims";
7575
static final String FIELD_PARAM_SCALING_FACTOR = "scaling_factor";
7676
static final String FIELD_PARAM_SEARCH_ANALYZER = "search_analyzer";
7777
static final String FIELD_PARAM_STORE = "store";
@@ -101,7 +101,7 @@ public final class MappingParameters {
101101
private final NullValueType nullValueType;
102102
private final Integer positionIncrementGap;
103103
private final boolean positiveScoreImpact;
104-
private final Integer dims;
104+
private final Integer dims;
105105
private final String searchAnalyzer;
106106
private final double scalingFactor;
107107
private final Similarity similarity;
@@ -163,7 +163,8 @@ private MappingParameters(Field field) {
163163
positiveScoreImpact = field.positiveScoreImpact();
164164
dims = field.dims();
165165
if (type == FieldType.Dense_Vector) {
166-
Assert.isTrue(dims >= 1 && dims <= 2048, "Invalid required parameter! Dense_Vector value \"dims\" must be between 1 and 2048.");
166+
Assert.isTrue(dims >= 1 && dims <= 2048,
167+
"Invalid required parameter! Dense_Vector value \"dims\" must be between 1 and 2048.");
167168
}
168169
Assert.isTrue(field.enabled() || type == FieldType.Object, "enabled false is only allowed for field type object");
169170
enabled = field.enabled();
@@ -205,7 +206,8 @@ private MappingParameters(InnerField field) {
205206
positiveScoreImpact = field.positiveScoreImpact();
206207
dims = field.dims();
207208
if (type == FieldType.Dense_Vector) {
208-
Assert.isTrue(dims >= 1 && dims <= 2048, "Invalid required parameter! Dense_Vector value \"dims\" must be between 1 and 2048.");
209+
Assert.isTrue(dims >= 1 && dims <= 2048,
210+
"Invalid required parameter! Dense_Vector value \"dims\" must be between 1 and 2048.");
209211
}
210212
enabled = true;
211213
eagerGlobalOrdinals = field.eagerGlobalOrdinals();
@@ -229,7 +231,7 @@ public void writeTypeAndParametersTo(XContentBuilder builder) throws IOException
229231
}
230232

231233
if (type != FieldType.Auto) {
232-
builder.field(FIELD_PARAM_TYPE, type.name().toLowerCase());
234+
builder.field(FIELD_PARAM_TYPE, type.getMappedName());
233235

234236
if (type == FieldType.Date) {
235237
List<String> formats = new ArrayList<>();

0 commit comments

Comments
 (0)