Skip to content

Commit 3810935

Browse files
committed
Add support for a 'format' option in fields retrieval. (#57855)
The new `format` option allows for passing a custom date format: ``` POST logs-*/_search { "fields": [ "file.*", { "field": "event.timestamp", "format": "epoch_millis" }, ... ] } ``` Other API notes: * We use the same syntax as `docvalue_fields` for consistency. Under the hood, both `fields` and `docvalue_fields` use the same `FieldAndFormat` object to share serialization logic. * Only `date` and `date_range` fields support formatting currently.
1 parent 9a1803b commit 3810935

File tree

65 files changed

+466
-211
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+466
-211
lines changed

modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/RankFeatureFieldMapper.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,10 @@ private Float objectToFloat(Object value) {
181181
}
182182

183183
@Override
184-
protected Float parseSourceValue(Object value) {
184+
protected Float parseSourceValue(Object value, String format) {
185+
if (format != null) {
186+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
187+
}
185188
return objectToFloat(value);
186189
}
187190

modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/RankFeaturesFieldMapper.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,10 @@ protected void parseCreateField(ParseContext context) throws IOException {
160160
}
161161

162162
@Override
163-
protected Object parseSourceValue(Object value) {
163+
protected Object parseSourceValue(Object value, String format) {
164+
if (format != null) {
165+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
166+
}
164167
return value;
165168
}
166169

modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapper.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,11 @@ private static double objectToDouble(Object value) {
475475
}
476476

477477
@Override
478-
protected Double parseSourceValue(Object value) {
478+
protected Double parseSourceValue(Object value, String format) {
479+
if (format != null) {
480+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
481+
}
482+
479483
double doubleValue = objectToDouble(value);
480484
double scalingFactor = fieldType().getScalingFactor();
481485
return Math.round(doubleValue * scalingFactor) / scalingFactor;

modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/SearchAsYouTypeFieldMapper.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ protected void parseCreateField(ParseContext context) {
419419
}
420420

421421
@Override
422-
protected Object parseSourceValue(Object value) {
422+
protected Object parseSourceValue(Object value, String format) {
423423
throw new UnsupportedOperationException();
424424
}
425425

@@ -465,7 +465,7 @@ protected void mergeOptions(FieldMapper other, List<String> conflicts) {
465465
}
466466

467467
@Override
468-
protected Object parseSourceValue(Object value) {
468+
protected Object parseSourceValue(Object value, String format) {
469469
throw new UnsupportedOperationException();
470470
}
471471

@@ -588,7 +588,10 @@ protected void parseCreateField(ParseContext context) throws IOException {
588588
}
589589

590590
@Override
591-
protected String parseSourceValue(Object value) {
591+
protected String parseSourceValue(Object value, String format) {
592+
if (format != null) {
593+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
594+
}
592595
return value.toString();
593596
}
594597

modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/TokenCountFieldMapper.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,11 @@ protected void parseCreateField(ParseContext context) throws IOException {
159159
}
160160

161161
@Override
162-
protected String parseSourceValue(Object value) {
162+
protected String parseSourceValue(Object value, String format) {
163+
if (format != null) {
164+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
165+
}
166+
163167
return value.toString();
164168
}
165169

modules/mapper-extras/src/test/java/org/elasticsearch/index/mapper/RankFeatureFieldMapperTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ public void testParseSourceValue() {
194194
Mapper.BuilderContext context = new Mapper.BuilderContext(settings, new ContentPath());
195195
RankFeatureFieldMapper mapper = new RankFeatureFieldMapper.Builder("field").build(context);
196196

197-
assertEquals(3.14f, mapper.parseSourceValue(3.14), 0.0001);
198-
assertEquals(42.9f, mapper.parseSourceValue("42.9"), 0.0001);
197+
assertEquals(3.14f, mapper.parseSourceValue(3.14, null), 0.0001);
198+
assertEquals(42.9f, mapper.parseSourceValue("42.9", null), 0.0001);
199199
}
200200
}

modules/mapper-extras/src/test/java/org/elasticsearch/index/mapper/ScaledFloatFieldMapperTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ public void testParseSourceValue() {
409409
.scalingFactor(100)
410410
.build(context);
411411

412-
assertEquals(3.14, mapper.parseSourceValue(3.1415926), 0.00001);
413-
assertEquals(3.14, mapper.parseSourceValue("3.1415"), 0.00001);
412+
assertEquals(3.14, mapper.parseSourceValue(3.1415926, null), 0.00001);
413+
assertEquals(3.14, mapper.parseSourceValue("3.1415", null), 0.00001);
414414
}
415415
}

modules/parent-join/src/main/java/org/elasticsearch/join/mapper/MetaJoinFieldMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ protected void parseCreateField(ParseContext context) throws IOException {
136136
}
137137

138138
@Override
139-
protected Object parseSourceValue(Object value) {
139+
protected Object parseSourceValue(Object value, String format) {
140140
throw new UnsupportedOperationException("The " + typeName() + " field is not stored in _source.");
141141
}
142142

modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentIdFieldMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ protected void parseCreateField(ParseContext context) throws IOException {
186186
}
187187

188188
@Override
189-
protected Object parseSourceValue(Object value) {
189+
protected Object parseSourceValue(Object value, String format) {
190190
throw new UnsupportedOperationException("The " + typeName() + " field is not stored in _source.");
191191
}
192192

modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,10 @@ protected void parseCreateField(ParseContext context) throws IOException {
348348
}
349349

350350
@Override
351-
protected Object parseSourceValue(Object value) {
351+
protected Object parseSourceValue(Object value, String format) {
352+
if (format != null) {
353+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
354+
}
352355
return value;
353356
}
354357

0 commit comments

Comments
 (0)