Skip to content

Commit cf15a2a

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 176a725 commit cf15a2a

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
@@ -191,7 +191,10 @@ private Float objectToFloat(Object value) {
191191
}
192192

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

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

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

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
@@ -492,7 +492,7 @@ protected void parseCreateField(ParseContext context) {
492492
}
493493

494494
@Override
495-
protected Object parseSourceValue(Object value) {
495+
protected Object parseSourceValue(Object value, String format) {
496496
throw new UnsupportedOperationException();
497497
}
498498

@@ -538,7 +538,7 @@ protected void mergeOptions(FieldMapper other, List<String> conflicts) {
538538
}
539539

540540
@Override
541-
protected Object parseSourceValue(Object value) {
541+
protected Object parseSourceValue(Object value, String format) {
542542
throw new UnsupportedOperationException();
543543
}
544544

@@ -695,7 +695,10 @@ protected void parseCreateField(ParseContext context) throws IOException {
695695
}
696696

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

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

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

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

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

0 commit comments

Comments
 (0)