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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]