This is an automated email from the ASF dual-hosted git repository.

mbudiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/main by this push:
     new ed1a4b0e59 [CALCITE-4954] Group TEXT field failed in Elasticsearch 
Adapter
ed1a4b0e59 is described below

commit ed1a4b0e5999de00b94d67e2927db5f7f464be1b
Author: Zhe Hu <[email protected]>
AuthorDate: Tue Jan 18 18:12:40 2022 +0800

    [CALCITE-4954] Group TEXT field failed in Elasticsearch Adapter
---
 .../adapter/elasticsearch/AggregationTest.java     | 24 ++++++++++++++++++++--
 .../elasticsearch/EmbeddedElasticsearchPolicy.java |  7 ++++++-
 2 files changed, 28 insertions(+), 3 deletions(-)

diff --git 
a/elasticsearch/src/test/java/org/apache/calcite/adapter/elasticsearch/AggregationTest.java
 
b/elasticsearch/src/test/java/org/apache/calcite/adapter/elasticsearch/AggregationTest.java
index b7df48e946..00d32f422b 100644
--- 
a/elasticsearch/src/test/java/org/apache/calcite/adapter/elasticsearch/AggregationTest.java
+++ 
b/elasticsearch/src/test/java/org/apache/calcite/adapter/elasticsearch/AggregationTest.java
@@ -62,6 +62,7 @@ class AggregationTest {
         .put("cat3", "keyword")
         .put("cat4", "date")
         .put("cat5", "integer")
+        .put("cat6", "text")
         .put("val1", "long")
         .put("val2", "long")
         .build();
@@ -69,7 +70,7 @@ class AggregationTest {
     NODE.createIndex(NAME, mappings);
 
     String doc1 = "{cat1:'a', cat2:'g', val1:1, cat4:'2018-01-01', cat5:1}";
-    String doc2 = "{cat2:'g', cat3:'y', val2:5, cat4:'2019-12-12'}";
+    String doc2 = "{cat2:'g', cat3:'y', val2:5, cat4:'2019-12-12', 
cat6:'text1'}";
     String doc3 = "{cat1:'b', cat2:'h', cat3:'z', cat5:2, val1:7, val2:42}";
 
     final ObjectMapper mapper = new ObjectMapper()
@@ -97,10 +98,11 @@ class AggregationTest {
     final String viewSql =
         String.format(Locale.ROOT,
             "select _MAP['cat1'] AS \"cat1\", "
-                + " _MAP['cat2']  AS \"cat2\", "
+                + " _MAP['cat2'] AS \"cat2\", "
                 + " _MAP['cat3'] AS \"cat3\", "
                 + " _MAP['cat4'] AS \"cat4\", "
                 + " _MAP['cat5'] AS \"cat5\", "
+                + " _MAP['cat6'] AS \"cat6\", "
                 + " _MAP['val1'] AS \"val1\", "
                 + " _MAP['val2'] AS \"val2\" "
                 + " from \"elastic\".\"%s\"",
@@ -402,6 +404,24 @@ class AggregationTest {
             "aggregations:{'v1.max.field': 'val1'",
             "'v2.min.field': 'val2'}"))
         .returnsUnordered("v1=7; v2=5");
+  }
 
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-4954";>[CALCITE-4954]
+   * Group TEXT field failed in Elasticsearch Adapter</a>.
+   */
+  @Test void testGroupTextField() {
+    CalciteAssert.that()
+        .with(AggregationTest::createConnection)
+        .query("select cat6, count(1) as CNT from view group by cat6")
+        .returnsUnordered("cat6=null; CNT=2",
+            "cat6=text1; CNT=1");
+
+    CalciteAssert.that()
+        .with(AggregationTest::createConnection)
+        .query("select cat1, cat6 from view group by cat1, cat6")
+        .returnsUnordered("cat1=a; cat6=null",
+            "cat1=b; cat6=null",
+            "cat1=null; cat6=text1");
   }
 }
diff --git 
a/elasticsearch/src/test/java/org/apache/calcite/adapter/elasticsearch/EmbeddedElasticsearchPolicy.java
 
b/elasticsearch/src/test/java/org/apache/calcite/adapter/elasticsearch/EmbeddedElasticsearchPolicy.java
index 92e690fa4b..dc49ad9d8b 100644
--- 
a/elasticsearch/src/test/java/org/apache/calcite/adapter/elasticsearch/EmbeddedElasticsearchPolicy.java
+++ 
b/elasticsearch/src/test/java/org/apache/calcite/adapter/elasticsearch/EmbeddedElasticsearchPolicy.java
@@ -190,7 +190,12 @@ class EmbeddedElasticsearchPolicy {
             suffix, type);
       }
     } else {
-      parent.withObject("/" + key).put("type", type);
+      if ("text".equalsIgnoreCase(type)) {
+        // aggregations and sorting are disabled by default for text field type
+        parent.withObject("/" + key).put("type", type).put("fielddata", 
"true");
+      } else {
+        parent.withObject("/" + key).put("type", type);
+      }
     }
   }
 

Reply via email to