@@ -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