|
15 | 15 | import java.util.List; |
16 | 16 | import java.util.Locale; |
17 | 17 | import java.util.Map; |
| 18 | +import lombok.extern.log4j.Log4j2; |
18 | 19 | import org.opensearch.sql.data.model.ExprTupleValue; |
19 | 20 | import org.opensearch.sql.data.model.ExprValue; |
20 | 21 | import org.opensearch.sql.data.type.ExprCoreType; |
|
25 | 26 | import org.opensearch.sql.opensearch.mapping.IndexMapping; |
26 | 27 | import org.opensearch.sql.opensearch.request.OpenSearchRequest; |
27 | 28 |
|
| 29 | +@Log4j2 |
28 | 30 | /** Describe index meta data request. */ |
29 | 31 | public class OpenSearchDescribeIndexRequest implements OpenSearchSystemRequest { |
30 | 32 |
|
@@ -100,40 +102,27 @@ public Map<String, OpenSearchDataType> getFieldTypes() { |
100 | 102 | Map<String, OpenSearchDataType> fieldTypes = new HashMap<>(); |
101 | 103 | Map<String, IndexMapping> indexMappings = |
102 | 104 | client.getIndexMappings(getLocalIndexNames(indexName.getIndexNames())); |
| 105 | + log.error(indexMappings.keySet()); |
103 | 106 | for (IndexMapping indexMapping : indexMappings.values()) { |
104 | | - addIndexMapping(fieldTypes, indexMapping.getFieldMappings()); |
| 107 | + mergeObjectAndArrayInsideMap(fieldTypes, indexMapping.getFieldMappings()); |
105 | 108 | } |
106 | 109 | return fieldTypes; |
107 | 110 | } |
108 | 111 |
|
109 | | - private void addIndexMapping( |
110 | | - Map<String, OpenSearchDataType> resultMap, Map<String, OpenSearchDataType> candidateMap) { |
111 | | - for (Map.Entry<String, OpenSearchDataType> entry : candidateMap.entrySet()) { |
112 | | - if (resultMap.containsKey(entry.getKey()) |
113 | | - && checkWhetherToMerge(entry.getValue(), resultMap.get(entry.getKey()))) { |
114 | | - resultMap.put( |
115 | | - entry.getKey(), mergetTwoObject(resultMap.get(entry.getKey()), entry.getValue())); |
116 | | - } else { |
117 | | - resultMap.put(entry.getKey(), entry.getValue()); |
118 | | - } |
119 | | - } |
120 | | - } |
| 112 | + private void mergeObjectAndArrayInsideMap( |
| 113 | + Map<String, OpenSearchDataType> target, Map<String, OpenSearchDataType> source) { |
| 114 | + for (Map.Entry<String, OpenSearchDataType> entry : source.entrySet()) { |
| 115 | + String key = entry.getKey(); |
| 116 | + OpenSearchDataType value = entry.getValue(); |
121 | 117 |
|
122 | | - private OpenSearchDataType mergetTwoObject(OpenSearchDataType first, OpenSearchDataType second) { |
123 | | - Map<String, OpenSearchDataType> candidateMap = second.getProperties(); |
124 | | - for (Map.Entry<String, OpenSearchDataType> entry : candidateMap.entrySet()) { |
125 | | - if (first.getProperties().containsKey(entry.getKey()) |
126 | | - && checkWhetherToMerge(entry.getValue(), first.getProperties().get(entry.getKey()))) { |
127 | | - first |
128 | | - .getProperties() |
129 | | - .put( |
130 | | - entry.getKey(), |
131 | | - mergetTwoObject(first.getProperties().get(entry.getKey()), entry.getValue())); |
| 118 | + if (target.containsKey(key) && checkWhetherToMerge(value, target.get(key))) { |
| 119 | + OpenSearchDataType merged = target.get(key); |
| 120 | + mergeObjectAndArrayInsideMap(merged.getProperties(), value.getProperties()); |
| 121 | + target.put(key, merged); |
132 | 122 | } else { |
133 | | - first.getProperties().put(entry.getKey(), entry.getValue()); |
| 123 | + target.put(key, value); |
134 | 124 | } |
135 | 125 | } |
136 | | - return first; |
137 | 126 | } |
138 | 127 |
|
139 | 128 | private Boolean checkWhetherToMerge(OpenSearchDataType first, OpenSearchDataType second) { |
|
0 commit comments