Backport of #48885
This commit is contained in:
parent
3b9ce0a4f3
commit
dfc6a13b44
|
@ -185,9 +185,9 @@ public class DatafeedJobsRestIT extends ESRestTestCase {
|
||||||
client().performRequest(createAirlineDataNested);
|
client().performRequest(createAirlineDataNested);
|
||||||
|
|
||||||
bulk.append("{\"index\": {\"_index\": \"nested-data\", \"_id\": 1}}\n");
|
bulk.append("{\"index\": {\"_index\": \"nested-data\", \"_id\": 1}}\n");
|
||||||
bulk.append("{\"time\":\"2016-06-01T00:00:00Z\", \"responsetime\":{\"millis\":135.22}}\n");
|
bulk.append("{\"time\":\"2016-06-01T00:00:00Z\", \"responsetime\":{\"millis\":135.22}, \"airline\":[{\"name\": \"foo\"}]}\n");
|
||||||
bulk.append("{\"index\": {\"_index\": \"nested-data\", \"_id\": 2}}\n");
|
bulk.append("{\"index\": {\"_index\": \"nested-data\", \"_id\": 2}}\n");
|
||||||
bulk.append("{\"time\":\"2016-06-01T01:59:00Z\",\"responsetime\":{\"millis\":222.0}}\n");
|
bulk.append("{\"time\":\"2016-06-01T01:59:00Z\", \"responsetime\":{\"millis\":222.00}, \"airline\":[{\"name\": \"bar\"}]}\n");
|
||||||
|
|
||||||
// Create index with multiple docs per time interval for aggregation testing
|
// Create index with multiple docs per time interval for aggregation testing
|
||||||
Request createAirlineDataAggs = new Request("PUT", "/airline-data-aggs");
|
Request createAirlineDataAggs = new Request("PUT", "/airline-data-aggs");
|
||||||
|
@ -291,7 +291,7 @@ public class DatafeedJobsRestIT extends ESRestTestCase {
|
||||||
.execute();
|
.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testLookbackOnlyWithNestedFields() throws Exception {
|
public void testLookbackonlyWithNestedFields() throws Exception {
|
||||||
String jobId = "test-lookback-only-with-nested-fields";
|
String jobId = "test-lookback-only-with-nested-fields";
|
||||||
Request createJobRequest = new Request("PUT", MachineLearning.BASE_PATH + "anomaly_detectors/" + jobId);
|
Request createJobRequest = new Request("PUT", MachineLearning.BASE_PATH + "anomaly_detectors/" + jobId);
|
||||||
createJobRequest.setJsonEntity("{\n"
|
createJobRequest.setJsonEntity("{\n"
|
||||||
|
@ -301,7 +301,8 @@ public class DatafeedJobsRestIT extends ESRestTestCase {
|
||||||
+ " \"detectors\": [\n"
|
+ " \"detectors\": [\n"
|
||||||
+ " {\n"
|
+ " {\n"
|
||||||
+ " \"function\": \"mean\",\n"
|
+ " \"function\": \"mean\",\n"
|
||||||
+ " \"field_name\": \"responsetime.millis\"\n"
|
+ " \"field_name\": \"responsetime.millis\",\n"
|
||||||
|
+ " \"by_field_name\": \"airline.name\"\n"
|
||||||
+ " }\n"
|
+ " }\n"
|
||||||
+ " ]\n"
|
+ " ]\n"
|
||||||
+ " },"
|
+ " },"
|
||||||
|
|
|
@ -54,6 +54,15 @@ public class SourceField extends AbstractField {
|
||||||
if (nextLevel instanceof Map<?, ?>) {
|
if (nextLevel instanceof Map<?, ?>) {
|
||||||
return (Map<String, Object>) source.get(key);
|
return (Map<String, Object>) source.get(key);
|
||||||
}
|
}
|
||||||
|
if (nextLevel instanceof List<?>) {
|
||||||
|
List<?> asList = (List<?>) nextLevel;
|
||||||
|
if (asList.isEmpty() == false) {
|
||||||
|
Object firstElement = asList.get(0);
|
||||||
|
if (firstElement instanceof Map<?, ?>) {
|
||||||
|
return (Map<String, Object>) firstElement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,4 +67,12 @@ public class SourceFieldTests extends ESTestCase {
|
||||||
|
|
||||||
assertThat(nested.value(hit), equalTo(new String[] { "bar" }));
|
assertThat(nested.value(hit), equalTo(new String[] { "bar" }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testValueGivenNestedArray() {
|
||||||
|
SearchHit hit = new SearchHitBuilder(42).setSource("{\"level_1\":{\"level_2\":[{\"foo\":\"bar\"}]}}").build();
|
||||||
|
|
||||||
|
ExtractedField nested = new SourceField("level_1.level_2.foo", Collections.singleton("text"));
|
||||||
|
|
||||||
|
assertThat(nested.value(hit), equalTo(new String[] { "bar" }));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue