Skip to content

Commit d47c624

Browse files
Add cache for field data types.
Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>
1 parent a6cf875 commit d47c624

1 file changed

Lines changed: 20 additions & 11 deletions

File tree

opensearch/src/main/java/org/opensearch/sql/opensearch/storage/OpenSearchIndex.java

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,12 @@ public class OpenSearchIndex implements Table {
4747
/**
4848
* The cached mapping of field and type in index.
4949
*/
50-
private Map<String, OpenSearchDataType> cachedFieldTypes = null;
50+
private Map<String, OpenSearchDataType> cachedFieldOpenSearchTypes = null;
51+
52+
/**
53+
* The cached ExprType of fields.
54+
*/
55+
private Map<String, ExprType> cachedFieldTypes = null;
5156

5257
/**
5358
* The cached max result window setting of index.
@@ -75,7 +80,6 @@ public void create(Map<String, ExprType> schema) {
7580
mappings.put("properties", properties);
7681

7782
for (Map.Entry<String, ExprType> colType : schema.entrySet()) {
78-
//properties.put(colType.getKey(), OpenSearchDataType.getOpenSearchType(colType.getValue()));
7983
properties.put(colType.getKey(), colType.getValue().legacyTypeName().toLowerCase());
8084
}
8185
client.createIndex(indexName.toString(), mappings);
@@ -93,25 +97,30 @@ public void create(Map<String, ExprType> schema) {
9397
*/
9498
@Override
9599
public Map<String, ExprType> getFieldTypes() {
100+
if (cachedFieldOpenSearchTypes == null) {
101+
cachedFieldOpenSearchTypes = new OpenSearchDescribeIndexRequest(client, indexName)
102+
.getFieldTypes();
103+
}
96104
if (cachedFieldTypes == null) {
97-
cachedFieldTypes = new OpenSearchDescribeIndexRequest(client, indexName).getFieldTypes();
105+
cachedFieldTypes = OpenSearchDataType.traverseAndFlatten(cachedFieldOpenSearchTypes)
106+
.entrySet().stream().collect(
107+
LinkedHashMap::new,
108+
(map, item) -> map.put(item.getKey(), item.getValue().getExprType()),
109+
Map::putAll);
98110
}
99-
return OpenSearchDataType.traverseAndFlatten(cachedFieldTypes).entrySet().stream()
100-
.collect(
101-
LinkedHashMap::new,
102-
(map, item) -> map.put(item.getKey(), item.getValue().getExprType()),
103-
Map::putAll);
111+
return cachedFieldTypes;
104112
}
105113

106114
/**
107115
* Get parsed mapping info.
108116
* @return A complete map between field names and their types.
109117
*/
110118
public Map<String, OpenSearchDataType> getFieldOpenSearchTypes() {
111-
if (cachedFieldTypes == null) {
112-
cachedFieldTypes = new OpenSearchDescribeIndexRequest(client, indexName).getFieldTypes();
119+
if (cachedFieldOpenSearchTypes == null) {
120+
cachedFieldOpenSearchTypes = new OpenSearchDescribeIndexRequest(client, indexName)
121+
.getFieldTypes();
113122
}
114-
return cachedFieldTypes;
123+
return cachedFieldOpenSearchTypes;
115124
}
116125

117126
/**

0 commit comments

Comments
 (0)