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

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 5cac64413a [Feature](ES): Support es get alias field type. (#17783)
5cac64413a is described below

commit 5cac64413a701db51bfacc8c04c790d072dd7e02
Author: Stalary <stal...@163.com>
AuthorDate: Tue Mar 21 00:32:24 2023 +0800

    [Feature](ES): Support es get alias field type. (#17783)
    
    Support es get alias field type.
---
 .../doris/external/elasticsearch/EsUtil.java       | 23 ++++++++++++++++++----
 .../doris/external/elasticsearch/EsUtilTest.java   |  9 +++++++++
 .../test/resources/data/es/test_field_alias.json   | 22 +++++++++++++++++++++
 3 files changed, 50 insertions(+), 4 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsUtil.java
index f9d3853ba7..d4bdb2ffb8 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsUtil.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsUtil.java
@@ -144,9 +144,8 @@ public class EsUtil {
             if (dorisMeta != null) {
                 JsonNode arrayNode = dorisMeta.get("array_fields");
                 if (arrayNode != null) {
-                    Iterator<JsonNode> iterator = arrayNode.iterator();
-                    while (iterator.hasNext()) {
-                        arrayFields.add(iterator.next().asText());
+                    for (JsonNode jsonNode : arrayNode) {
+                        arrayFields.add(jsonNode.asText());
                     }
                 }
             }
@@ -209,12 +208,28 @@ public class EsUtil {
         while (iterator.hasNext()) {
             String fieldName = iterator.next();
             ObjectNode fieldValue = (ObjectNode) mappingProps.get(fieldName);
-            Column column = parseEsField(fieldName, fieldValue, arrayFields);
+            Column column = parseEsField(fieldName, 
replaceFieldAlias(mappingProps, fieldValue), arrayFields);
             columns.add(column);
         }
         return columns;
     }
 
+    private static ObjectNode replaceFieldAlias(ObjectNode mappingProps, 
ObjectNode fieldValue) {
+        String typeStr = fieldValue.get("type").asText();
+        if ("alias".equals(typeStr)) {
+            String path = fieldValue.get("path").asText();
+            if ("_id".equals(path)) {
+                // _id is not in mappingProps, use keyword type.
+                fieldValue.put("type", "keyword");
+            } else {
+                if (mappingProps.has(path)) {
+                    return (ObjectNode) mappingProps.get(path);
+                }
+            }
+        }
+        return fieldValue;
+    }
+
     private static Column parseEsField(String fieldName, ObjectNode 
fieldValue, List<String> arrayFields) {
         Column column = new Column();
         column.setName(fieldName);
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/external/elasticsearch/EsUtilTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/external/elasticsearch/EsUtilTest.java
index 6706ccd777..bf51af0c80 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/external/elasticsearch/EsUtilTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/external/elasticsearch/EsUtilTest.java
@@ -250,4 +250,13 @@ public class EsUtilTest extends EsTestCase {
         }
     }
 
+    @Test
+    public void testFieldAlias() throws IOException, URISyntaxException {
+        ObjectNode testFieldAlias = EsUtil.getRootSchema(
+                
EsUtil.getMapping(loadJsonFromFile("data/es/test_field_alias.json")), null, new 
ArrayList<>());
+        List<Column> parseColumns = 
EsUtil.genColumnsFromEs("test_field_alias", null, testFieldAlias, true, new 
ArrayList<>());
+        Assertions.assertEquals("datetimev2(0)", 
parseColumns.get(2).getType().toSql());
+        Assertions.assertEquals("text", parseColumns.get(4).getType().toSql());
+    }
+
 }
diff --git a/fe/fe-core/src/test/resources/data/es/test_field_alias.json 
b/fe/fe-core/src/test/resources/data/es/test_field_alias.json
new file mode 100644
index 0000000000..c1ef43ab06
--- /dev/null
+++ b/fe/fe-core/src/test/resources/data/es/test_field_alias.json
@@ -0,0 +1,22 @@
+{
+  "test_field_alias": {
+    "mappings": {
+      "properties": {
+        "test1": {
+          "type": "date"
+        },
+        "test2": {
+          "type": "alias",
+          "path": "test1"
+        },
+        "test3": {
+          "type": "date"
+        },
+        "test4": {
+          "type": "alias",
+          "path": "_id"
+        }
+      }
+    }
+  }
+}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to