File tree 4 files changed +42
-3
lines changed
main/java/org/elasticsearch/xpack/ml/datafeed/extractor/scroll 4 files changed +42
-3
lines changed Original file line number Diff line number Diff line change 7
7
8
8
import org .elasticsearch .search .SearchHit ;
9
9
import org .elasticsearch .search .SearchHitField ;
10
+ import org .joda .time .base .BaseDateTime ;
10
11
11
12
import java .util .List ;
12
13
import java .util .Map ;
@@ -36,6 +37,13 @@ public ExtractionMethod getExtractionMethod() {
36
37
37
38
public abstract Object [] value (SearchHit hit );
38
39
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
+
39
47
public static ExtractedField newField (String name , ExtractionMethod extractionMethod ) {
40
48
switch (extractionMethod ) {
41
49
case DOC_VALUE :
@@ -65,6 +73,23 @@ public Object[] value(SearchHit hit) {
65
73
}
66
74
}
67
75
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
+
68
93
private static class FromSource extends ExtractedField {
69
94
70
95
private String [] namePath ;
Original file line number Diff line number Diff line change @@ -71,7 +71,7 @@ public Long timeFieldValue(SearchHit hit) {
71
71
public static ExtractedFields build (Job job , DatafeedConfig datafeedConfig ) {
72
72
Set <String > scriptFields = datafeedConfig .getScriptFields ().stream ().map (sf -> sf .fieldName ()).collect (Collectors .toSet ());
73
73
String timeField = job .getDataDescription ().getTimeField ();
74
- ExtractedField timeExtractedField = ExtractedField .newField (timeField , scriptFields .contains (timeField ) ?
74
+ ExtractedField timeExtractedField = ExtractedField .newTimeField (timeField , scriptFields .contains (timeField ) ?
75
75
ExtractedField .ExtractionMethod .SCRIPT_FIELD : ExtractedField .ExtractionMethod .DOC_VALUE );
76
76
List <String > remainingFields = job .allFields ().stream ().filter (f -> !f .equals (timeField )).collect (Collectors .toList ());
77
77
List <ExtractedField > allExtractedFields = new ArrayList <>(remainingFields .size ());
Original file line number Diff line number Diff line change 11
11
import org .elasticsearch .search .internal .InternalSearchHit ;
12
12
import org .elasticsearch .search .internal .InternalSearchHitField ;
13
13
import org .elasticsearch .test .ESTestCase ;
14
+ import org .joda .time .DateTime ;
14
15
15
16
import java .util .Arrays ;
16
17
import java .util .HashMap ;
@@ -96,6 +97,18 @@ public void testValueGivenEmptyHit() {
96
97
assertThat (sourceField .value (hit ), equalTo (new Object [0 ]));
97
98
}
98
99
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
+
99
112
static class SearchHitBuilder {
100
113
101
114
private final InternalSearchHit hit ;
Original file line number Diff line number Diff line change 7
7
8
8
import org .elasticsearch .search .SearchHit ;
9
9
import org .elasticsearch .test .ESTestCase ;
10
+ import org .joda .time .DateTime ;
10
11
11
12
import java .util .Arrays ;
12
13
import java .util .Collections ;
15
16
16
17
public class ExtractedFieldsTests extends ESTestCase {
17
18
18
- private ExtractedField timeField = ExtractedField .newField ("time" , ExtractedField .ExtractionMethod .DOC_VALUE );
19
+ private ExtractedField timeField = ExtractedField .newTimeField ("time" , ExtractedField .ExtractionMethod .DOC_VALUE );
19
20
20
21
public void testInvalidConstruction () {
21
22
expectThrows (IllegalArgumentException .class , () -> new ExtractedFields (timeField , Collections .emptyList ()));
@@ -47,7 +48,7 @@ public void testAllTypesOfFields() {
47
48
}
48
49
49
50
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 ();
51
52
52
53
ExtractedFields extractedFields = new ExtractedFields (timeField , Arrays .asList (timeField ));
53
54
You can’t perform that action at this time.
0 commit comments