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