Skip to content

Commit 4788875

Browse files
authored
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 f703951 commit 4788875

File tree

65 files changed

+514
-254
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

+514
-254
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
@@ -214,7 +214,10 @@ private Float objectToFloat(Object value) {
214214
}
215215

216216
@Override
217-
protected Float parseSourceValue(Object value) {
217+
protected Float parseSourceValue(Object value, String format) {
218+
if (format != null) {
219+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
220+
}
218221
return objectToFloat(value);
219222
}
220223

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
@@ -176,7 +176,10 @@ protected void parseCreateField(ParseContext context) throws IOException {
176176
}
177177

178178
@Override
179-
protected Object parseSourceValue(Object value) {
179+
protected Object parseSourceValue(Object value, String format) {
180+
if (format != null) {
181+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
182+
}
180183
return value;
181184
}
182185

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
@@ -486,7 +486,11 @@ private static double objectToDouble(Object value) {
486486
}
487487

488488
@Override
489-
protected Double parseSourceValue(Object value) {
489+
protected Double parseSourceValue(Object value, String format) {
490+
if (format != null) {
491+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
492+
}
493+
490494
double doubleValue = objectToDouble(value);
491495
double scalingFactor = fieldType().getScalingFactor();
492496
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
@@ -474,7 +474,7 @@ protected void parseCreateField(ParseContext context) {
474474
}
475475

476476
@Override
477-
protected Object parseSourceValue(Object value) {
477+
protected Object parseSourceValue(Object value, String format) {
478478
throw new UnsupportedOperationException();
479479
}
480480

@@ -516,7 +516,7 @@ protected void mergeOptions(FieldMapper other, List<String> conflicts) {
516516
}
517517

518518
@Override
519-
protected Object parseSourceValue(Object value) {
519+
protected Object parseSourceValue(Object value, String format) {
520520
throw new UnsupportedOperationException();
521521
}
522522

@@ -676,7 +676,10 @@ protected void parseCreateField(ParseContext context) throws IOException {
676676
}
677677

678678
@Override
679-
protected String parseSourceValue(Object value) {
679+
protected String parseSourceValue(Object value, String format) {
680+
if (format != null) {
681+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
682+
}
680683
return value.toString();
681684
}
682685

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
@@ -151,7 +151,11 @@ protected void parseCreateField(ParseContext context) throws IOException {
151151
}
152152

153153
@Override
154-
protected String parseSourceValue(Object value) {
154+
protected String parseSourceValue(Object value, String format) {
155+
if (format != null) {
156+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
157+
}
158+
155159
return value.toString();
156160
}
157161

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
@@ -188,7 +188,7 @@ public void testParseSourceValue() {
188188
Mapper.BuilderContext context = new Mapper.BuilderContext(settings, new ContentPath());
189189
RankFeatureFieldMapper mapper = new RankFeatureFieldMapper.Builder("field").build(context);
190190

191-
assertEquals(3.14f, mapper.parseSourceValue(3.14), 0.0001);
192-
assertEquals(42.9f, mapper.parseSourceValue("42.9"), 0.0001);
191+
assertEquals(3.14f, mapper.parseSourceValue(3.14, null), 0.0001);
192+
assertEquals(42.9f, mapper.parseSourceValue("42.9", null), 0.0001);
193193
}
194194
}

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
@@ -403,7 +403,7 @@ public void testParseSourceValue() {
403403
.scalingFactor(100)
404404
.build(context);
405405

406-
assertEquals(3.14, mapper.parseSourceValue(3.1415926), 0.00001);
407-
assertEquals(3.14, mapper.parseSourceValue("3.1415"), 0.00001);
406+
assertEquals(3.14, mapper.parseSourceValue(3.1415926, null), 0.00001);
407+
assertEquals(3.14, mapper.parseSourceValue("3.1415", null), 0.00001);
408408
}
409409
}

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
@@ -148,7 +148,7 @@ protected void parseCreateField(ParseContext context) throws IOException {
148148
}
149149

150150
@Override
151-
protected Object parseSourceValue(Object value) {
151+
protected Object parseSourceValue(Object value, String format) {
152152
throw new UnsupportedOperationException("The " + typeName() + " field is not stored in _source.");
153153
}
154154

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
@@ -192,7 +192,7 @@ protected void parseCreateField(ParseContext context) throws IOException {
192192
}
193193

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

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
@@ -362,7 +362,10 @@ protected void parseCreateField(ParseContext context) throws IOException {
362362
}
363363

364364
@Override
365-
protected Object parseSourceValue(Object value) {
365+
protected Object parseSourceValue(Object value, String format) {
366+
if (format != null) {
367+
throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats.");
368+
}
366369
return value;
367370
}
368371

0 commit comments

Comments
 (0)