Skip to content

Commit 201ca80

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 d6a860d commit 201ca80

File tree

65 files changed

+474
-213
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

+474
-213
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
@@ -190,7 +190,10 @@ private Float objectToFloat(Object value) {
190190
}
191191

192192
@Override
193-
protected Float parseSourceValue(Object value) {
193+
protected Float parseSourceValue(Object value, String format) {
194+
if (format != null) {
195+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
196+
}
194197
return objectToFloat(value);
195198
}
196199

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
@@ -168,7 +168,10 @@ protected void parseCreateField(ParseContext context) throws IOException {
168168
}
169169

170170
@Override
171-
protected Object parseSourceValue(Object value) {
171+
protected Object parseSourceValue(Object value, String format) {
172+
if (format != null) {
173+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
174+
}
172175
return value;
173176
}
174177

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
@@ -497,7 +497,11 @@ private static double objectToDouble(Object value) {
497497
}
498498

499499
@Override
500-
protected Double parseSourceValue(Object value) {
500+
protected Double parseSourceValue(Object value, String format) {
501+
if (format != null) {
502+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
503+
}
504+
501505
double doubleValue = objectToDouble(value);
502506
double scalingFactor = fieldType().getScalingFactor();
503507
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
@@ -494,7 +494,7 @@ protected void parseCreateField(ParseContext context) {
494494
}
495495

496496
@Override
497-
protected Object parseSourceValue(Object value) {
497+
protected Object parseSourceValue(Object value, String format) {
498498
throw new UnsupportedOperationException();
499499
}
500500

@@ -540,7 +540,7 @@ protected void mergeOptions(FieldMapper other, List<String> conflicts) {
540540
}
541541

542542
@Override
543-
protected Object parseSourceValue(Object value) {
543+
protected Object parseSourceValue(Object value, String format) {
544544
throw new UnsupportedOperationException();
545545
}
546546

@@ -697,7 +697,10 @@ protected void parseCreateField(ParseContext context) throws IOException {
697697
}
698698

699699
@Override
700-
protected String parseSourceValue(Object value) {
700+
protected String parseSourceValue(Object value, String format) {
701+
if (format != null) {
702+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
703+
}
701704
return value.toString();
702705
}
703706

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
@@ -145,7 +145,7 @@ protected void parseCreateField(ParseContext context) throws IOException {
145145
}
146146

147147
@Override
148-
protected Object parseSourceValue(Object value) {
148+
protected Object parseSourceValue(Object value, String format) {
149149
throw new UnsupportedOperationException("The " + typeName() + " field is not stored in _source.");
150150
}
151151

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
@@ -194,7 +194,7 @@ protected void parseCreateField(ParseContext context) throws IOException {
194194
}
195195

196196
@Override
197-
protected Object parseSourceValue(Object value) {
197+
protected Object parseSourceValue(Object value, String format) {
198198
throw new UnsupportedOperationException("The " + typeName() + " field is not stored in _source.");
199199
}
200200

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
@@ -356,7 +356,10 @@ protected void parseCreateField(ParseContext context) throws IOException {
356356
}
357357

358358
@Override
359-
protected Object parseSourceValue(Object value) {
359+
protected Object parseSourceValue(Object value, String format) {
360+
if (format != null) {
361+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
362+
}
360363
return value;
361364
}
362365

0 commit comments

Comments
 (0)