File tree Expand file tree Collapse file tree 4 files changed +42
-3
lines changed
main/java/org/elasticsearch/xpack/ml/datafeed/extractor/scroll Expand file tree Collapse file tree 4 files changed +42
-3
lines changed Original file line number Diff line number Diff line change 77
88import org .elasticsearch .search .SearchHit ;
99import org .elasticsearch .search .SearchHitField ;
10+ import org .joda .time .base .BaseDateTime ;
1011
1112import java .util .List ;
1213import java .util .Map ;
@@ -36,6 +37,13 @@ public ExtractionMethod getExtractionMethod() {
3637
3738 public abstract Object [] value (SearchHit hit );
3839
40+ public static ExtractedField newTimeField (String name , ExtractionMethod extractionMethod ) {
41+ if (extractionMethod == ExtractionMethod .SOURCE ) {
42+ throw new IllegalArgumentException ("time field cannot be extracted from source" );
43+ }
44+ return new TimeField (name , extractionMethod );
45+ }
46+
3947 public static ExtractedField newField (String name , ExtractionMethod extractionMethod ) {
4048 switch (extractionMethod ) {
4149 case DOC_VALUE :
@@ -65,6 +73,23 @@ public Object[] value(SearchHit hit) {
6573 }
6674 }
6775
76+ private static class TimeField extends FromFields {
77+
78+ TimeField (String name , ExtractionMethod extractionMethod ) {
79+ super (name , extractionMethod );
80+ }
81+
82+ @ Override
83+ public Object [] value (SearchHit hit ) {
84+ Object [] value = super .value (hit );
85+ if (value .length != 1 ) {
86+ return value ;
87+ }
88+ value [0 ] = ((BaseDateTime ) value [0 ]).getMillis ();
89+ return value ;
90+ }
91+ }
92+
6893 private static class FromSource extends ExtractedField {
6994
7095 private String [] namePath ;
Original file line number Diff line number Diff line change @@ -71,7 +71,7 @@ public Long timeFieldValue(SearchHit hit) {
7171 public static ExtractedFields build (Job job , DatafeedConfig datafeedConfig ) {
7272 Set <String > scriptFields = datafeedConfig .getScriptFields ().stream ().map (sf -> sf .fieldName ()).collect (Collectors .toSet ());
7373 String timeField = job .getDataDescription ().getTimeField ();
74- ExtractedField timeExtractedField = ExtractedField .newField (timeField , scriptFields .contains (timeField ) ?
74+ ExtractedField timeExtractedField = ExtractedField .newTimeField (timeField , scriptFields .contains (timeField ) ?
7575 ExtractedField .ExtractionMethod .SCRIPT_FIELD : ExtractedField .ExtractionMethod .DOC_VALUE );
7676 List <String > remainingFields = job .allFields ().stream ().filter (f -> !f .equals (timeField )).collect (Collectors .toList ());
7777 List <ExtractedField > allExtractedFields = new ArrayList <>(remainingFields .size ());
Original file line number Diff line number Diff line change 1111import org .elasticsearch .search .internal .InternalSearchHit ;
1212import org .elasticsearch .search .internal .InternalSearchHitField ;
1313import org .elasticsearch .test .ESTestCase ;
14+ import org .joda .time .DateTime ;
1415
1516import java .util .Arrays ;
1617import java .util .HashMap ;
@@ -96,6 +97,18 @@ public void testValueGivenEmptyHit() {
9697 assertThat (sourceField .value (hit ), equalTo (new Object [0 ]));
9798 }
9899
100+ public void testNewTimeFieldGivenSource () {
101+ expectThrows (IllegalArgumentException .class , () -> ExtractedField .newTimeField ("time" , ExtractedField .ExtractionMethod .SOURCE ));
102+ }
103+
104+ public void testValueGivenTimeField () {
105+ SearchHit hit = new SearchHitBuilder (42 ).addField ("time" , new DateTime (123456789L )).build ();
106+
107+ ExtractedField timeField = ExtractedField .newTimeField ("time" , ExtractedField .ExtractionMethod .DOC_VALUE );
108+
109+ assertThat (timeField .value (hit ), equalTo (new Object [] { 123456789L }));
110+ }
111+
99112 static class SearchHitBuilder {
100113
101114 private final InternalSearchHit hit ;
Original file line number Diff line number Diff line change 77
88import org .elasticsearch .search .SearchHit ;
99import org .elasticsearch .test .ESTestCase ;
10+ import org .joda .time .DateTime ;
1011
1112import java .util .Arrays ;
1213import java .util .Collections ;
1516
1617public class ExtractedFieldsTests extends ESTestCase {
1718
18- private ExtractedField timeField = ExtractedField .newField ("time" , ExtractedField .ExtractionMethod .DOC_VALUE );
19+ private ExtractedField timeField = ExtractedField .newTimeField ("time" , ExtractedField .ExtractionMethod .DOC_VALUE );
1920
2021 public void testInvalidConstruction () {
2122 expectThrows (IllegalArgumentException .class , () -> new ExtractedFields (timeField , Collections .emptyList ()));
@@ -47,7 +48,7 @@ public void testAllTypesOfFields() {
4748 }
4849
4950 public void testTimeFieldValue () {
50- SearchHit hit = new ExtractedFieldTests .SearchHitBuilder (1 ).addField ("time" , 1000L ).build ();
51+ SearchHit hit = new ExtractedFieldTests .SearchHitBuilder (1 ).addField ("time" , new DateTime ( 1000L ) ).build ();
5152
5253 ExtractedFields extractedFields = new ExtractedFields (timeField , Arrays .asList (timeField ));
5354
You can’t perform that action at this time.
0 commit comments