|
@@ -31,6 +31,7 @@ import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
|
|
import static org.elasticsearch.xpack.core.security.authc.support.UsernamePasswordToken.basicAuthHeaderValue;
|
|
|
import static org.hamcrest.Matchers.containsString;
|
|
|
import static org.hamcrest.Matchers.equalTo;
|
|
|
+import static org.hamcrest.Matchers.hasEntry;
|
|
|
import static org.hamcrest.Matchers.hasSize;
|
|
|
import static org.hamcrest.Matchers.is;
|
|
|
import static org.hamcrest.Matchers.not;
|
|
@@ -1241,6 +1242,65 @@ public class TransformPivotRestIT extends TransformRestTestCase {
|
|
|
assertEquals((4 + 15), Double.valueOf(latlon[1]), 0.000001);
|
|
|
}
|
|
|
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public void testPivotWithGeoLineAgg() throws Exception {
|
|
|
+ String transformId = "geo_line_pivot";
|
|
|
+ String transformIndex = "geo_line_pivot_reviews";
|
|
|
+ setupDataAccessRole(DATA_ACCESS_ROLE, REVIEWS_INDEX_NAME, transformIndex);
|
|
|
+
|
|
|
+ final Request createTransformRequest = createRequestWithAuth(
|
|
|
+ "PUT",
|
|
|
+ getTransformEndpoint() + transformId,
|
|
|
+ BASIC_AUTH_VALUE_TRANSFORM_ADMIN_WITH_SOME_DATA_ACCESS
|
|
|
+ );
|
|
|
+
|
|
|
+ String config = "{"
|
|
|
+ + " \"source\": {\"index\":\""
|
|
|
+ + REVIEWS_INDEX_NAME
|
|
|
+ + "\"},"
|
|
|
+ + " \"dest\": {\"index\":\""
|
|
|
+ + transformIndex
|
|
|
+ + "\"},";
|
|
|
+
|
|
|
+ config += " \"pivot\": {"
|
|
|
+ + " \"group_by\": {"
|
|
|
+ + " \"reviewer\": {"
|
|
|
+ + " \"terms\": {"
|
|
|
+ + " \"field\": \"user_id\""
|
|
|
+ + " } } },"
|
|
|
+ + " \"aggregations\": {"
|
|
|
+ + " \"avg_rating\": {"
|
|
|
+ + " \"avg\": {"
|
|
|
+ + " \"field\": \"stars\""
|
|
|
+ + " } },"
|
|
|
+ + " \"location\": {"
|
|
|
+ + " \"geo_line\": {\"point\": {\"field\":\"location\"}, \"sort\": {\"field\": \"timestamp\"}}"
|
|
|
+ + " } } }"
|
|
|
+ + "}";
|
|
|
+
|
|
|
+ createTransformRequest.setJsonEntity(config);
|
|
|
+ Map<String, Object> createTransformResponse = entityAsMap(client().performRequest(createTransformRequest));
|
|
|
+ assertThat(createTransformResponse.get("acknowledged"), equalTo(Boolean.TRUE));
|
|
|
+
|
|
|
+ startAndWaitForTransform(transformId, transformIndex, BASIC_AUTH_VALUE_TRANSFORM_ADMIN_WITH_SOME_DATA_ACCESS);
|
|
|
+ assertTrue(indexExists(transformIndex));
|
|
|
+
|
|
|
+ // we expect 27 documents as there shall be 27 user_id's
|
|
|
+ Map<String, Object> indexStats = getAsMap(transformIndex + "/_stats");
|
|
|
+ assertEquals(27, XContentMapValues.extractValue("_all.total.docs.count", indexStats));
|
|
|
+
|
|
|
+ // get and check some users
|
|
|
+ Map<String, Object> searchResult = getAsMap(transformIndex + "/_search?q=reviewer:user_4");
|
|
|
+ assertEquals(1, XContentMapValues.extractValue("hits.total.value", searchResult));
|
|
|
+ Number actual = (Number) ((List<?>) XContentMapValues.extractValue("hits.hits._source.avg_rating", searchResult)).get(0);
|
|
|
+ assertEquals(3.878048780, actual.doubleValue(), 0.000001);
|
|
|
+ Map<String, Object> actualString = (Map<String, Object>) ((List<?>) XContentMapValues.extractValue(
|
|
|
+ "hits.hits._source.location",
|
|
|
+ searchResult
|
|
|
+ )).get(0);
|
|
|
+ assertThat(actualString, hasEntry("type", "LineString"));
|
|
|
+ }
|
|
|
+
|
|
|
@SuppressWarnings("unchecked")
|
|
|
public void testPivotWithGeotileGroupBy() throws Exception {
|
|
|
String transformId = "geotile_grid_group_by";
|