11import type { TIndexDescription } from '../../../types/api/schema' ;
22import type {
3- TVectorIndexKmeansTreeDescriptionSettings ,
4- TVectorIndexKmeansTreeDescriptionSettingsInner ,
3+ TFulltextIndexAnalyzers ,
4+ TFulltextIndexSettings ,
5+ TKMeansTreeSettings ,
6+ TVectorIndexSettings ,
57} from '../../../types/api/schema/tableIndex' ;
68import { formatNumber } from '../../../utils/dataFormatters/dataFormatters' ;
79import type { InfoViewerItem } from '../InfoViewer' ;
@@ -39,15 +41,19 @@ export function buildIndexInfo(tableIndex?: TIndexDescription): InfoViewerItem[]
3941 return info ;
4042}
4143
42- type VectorSettings = TVectorIndexKmeansTreeDescriptionSettings ;
44+ /* eslint-disable camelcase */
4345
44- export function buildVectorIndexInfo ( vectorSettings ?: VectorSettings ) : InfoViewerItem [ ] {
46+ export function buildVectorIndexSettingsInfo (
47+ kMeansTreeSettings ?: TKMeansTreeSettings ,
48+ ) : InfoViewerItem [ ] {
4549 const info : InfoViewerItem [ ] = [ ] ;
46- if ( ! vectorSettings ) {
50+ if ( ! kMeansTreeSettings ) {
4751 return info ;
4852 }
4953
50- const vectorFormatter = createInfoFormatter < Pick < VectorSettings , 'clusters' | 'levels' > > ( {
54+ const kMeansTreeSettingsFormatter = createInfoFormatter <
55+ Pick < TKMeansTreeSettings , 'clusters' | 'levels' >
56+ > ( {
5157 values : {
5258 clusters : ( v ) => ( typeof v === 'number' ? formatNumber ( v ) : v ) ,
5359 levels : ( v ) => ( typeof v === 'number' ? formatNumber ( v ) : v ) ,
@@ -58,37 +64,150 @@ export function buildVectorIndexInfo(vectorSettings?: VectorSettings): InfoViewe
5864 } ,
5965 } ) ;
6066
61- const settingsFormatter = createInfoFormatter < TVectorIndexKmeansTreeDescriptionSettingsInner > ( {
67+ const { clusters, levels, settings} = kMeansTreeSettings ;
68+ if ( clusters !== undefined ) {
69+ info . push ( kMeansTreeSettingsFormatter ( 'clusters' , clusters ) ) ;
70+ }
71+ if ( levels !== undefined ) {
72+ info . push ( kMeansTreeSettingsFormatter ( 'levels' , levels ) ) ;
73+ }
74+
75+ const vectorIndexSettingsFormatter = createInfoFormatter < TVectorIndexSettings > ( {
6276 values : {
6377 vector_dimension : ( v ) => ( typeof v === 'number' ? formatNumber ( v ) : v ) ,
6478 vector_type : ( v ) => ( typeof v === 'string' ? v . replace ( / ^ V E C T O R _ T Y P E _ / , '' ) : v ) ,
6579 } ,
6680 labels : {
67- vector_dimension : i18n ( 'field_vector-dimension ' ) ,
68- vector_type : i18n ( 'field_vector-type ' ) ,
81+ vector_dimension : i18n ( 'field_vector_dimension ' ) ,
82+ vector_type : i18n ( 'field_vector_type ' ) ,
6983 metric : i18n ( 'field_metric' ) ,
7084 } ,
7185 } ) ;
7286
73- const { clusters , levels , settings } = vectorSettings ?? { } ;
74- if ( clusters !== undefined ) {
75- info . push ( vectorFormatter ( 'clusters ', clusters ) ) ;
87+ const { metric , vector_type , vector_dimension } = settings ?? { } ;
88+ if ( metric !== undefined ) {
89+ info . push ( vectorIndexSettingsFormatter ( 'metric ', metric ) ) ;
7690 }
77- if ( levels !== undefined ) {
78- info . push ( vectorFormatter ( 'levels' , levels ) ) ;
91+ if ( vector_type !== undefined ) {
92+ info . push ( vectorIndexSettingsFormatter ( 'vector_type' , vector_type ) ) ;
93+ }
94+ if ( vector_dimension !== undefined ) {
95+ info . push ( vectorIndexSettingsFormatter ( 'vector_dimension' , vector_dimension ) ) ;
7996 }
8097
81- const { vector_dimension : vectorDimension , vector_type : vectorType , metric} = settings ?? { } ;
98+ return info ;
99+ }
82100
83- if ( vectorDimension !== undefined ) {
84- info . push ( settingsFormatter ( 'vector_dimension' , vectorDimension ) ) ;
101+ export function buildFulltextIndexSettingsInfo (
102+ fulltextSettings ?: TFulltextIndexSettings ,
103+ ) : InfoViewerItem [ ] {
104+ const info : InfoViewerItem [ ] = [ ] ;
105+ if ( ! fulltextSettings ) {
106+ return info ;
85107 }
86- if ( vectorType !== undefined ) {
87- info . push ( settingsFormatter ( 'vector_type' , vectorType ) ) ;
108+
109+ const fulltextFormatter = createInfoFormatter < Pick < TFulltextIndexSettings , 'layout' > > ( {
110+ values : {
111+ layout : ( v ) => v ,
112+ } ,
113+ labels : {
114+ layout : i18n ( 'field_layout' ) ,
115+ } ,
116+ } ) ;
117+
118+ const { layout} = fulltextSettings ;
119+ if ( layout !== undefined ) {
120+ info . push ( fulltextFormatter ( 'layout' , layout ) ) ;
88121 }
89- if ( metric !== undefined ) {
90- info . push ( settingsFormatter ( 'metric' , metric ) ) ;
122+
123+ const fulltextIndexAnalyzersFormatter = createInfoFormatter < TFulltextIndexAnalyzers > ( {
124+ values : {
125+ tokenizer : ( v ) => v ,
126+ language : ( v ) => v ,
127+ use_filter_lowercase : ( v ) =>
128+ v === true ? i18n ( 'filter_enabled' ) : i18n ( 'filter_disabled' ) ,
129+ use_filter_stopwords : ( v ) =>
130+ v === true ? i18n ( 'filter_enabled' ) : i18n ( 'filter_disabled' ) ,
131+ use_filter_ngram : ( v ) =>
132+ v === true ? i18n ( 'filter_enabled' ) : i18n ( 'filter_disabled' ) ,
133+ use_filter_edge_ngram : ( v ) =>
134+ v === true ? i18n ( 'filter_enabled' ) : i18n ( 'filter_disabled' ) ,
135+ filter_ngram_min_length : ( v ) => ( typeof v === 'number' ? formatNumber ( v ) : v ) ,
136+ filter_ngram_max_length : ( v ) => ( typeof v === 'number' ? formatNumber ( v ) : v ) ,
137+ use_filter_length : ( v ) =>
138+ v === true ? i18n ( 'filter_enabled' ) : i18n ( 'filter_disabled' ) ,
139+ filter_length_min : ( v ) => ( typeof v === 'number' ? formatNumber ( v ) : v ) ,
140+ filter_length_max : ( v ) => ( typeof v === 'number' ? formatNumber ( v ) : v ) ,
141+ } ,
142+ labels : {
143+ tokenizer : i18n ( 'field_tokenizer' ) ,
144+ language : i18n ( 'field_language' ) ,
145+ use_filter_lowercase : i18n ( 'field_use_filter_lowercase' ) ,
146+ use_filter_stopwords : i18n ( 'field_use_filter_stopwords' ) ,
147+ use_filter_ngram : i18n ( 'field_use_filter_ngram' ) ,
148+ use_filter_edge_ngram : i18n ( 'field_use_filter_edge_ngram' ) ,
149+ filter_ngram_min_length : i18n ( 'field_filter_ngram_min_length' ) ,
150+ filter_ngram_max_length : i18n ( 'field_filter_ngram_max_length' ) ,
151+ use_filter_length : i18n ( 'field_use_filter_length' ) ,
152+ filter_length_min : i18n ( 'field_filter_length_min' ) ,
153+ filter_length_max : i18n ( 'field_filter_length_max' ) ,
154+ } ,
155+ } ) ;
156+
157+ const analyzers = fulltextSettings . columns ?. filter ( ( col ) => col . analyzers !== undefined ) [ 0 ]
158+ ?. analyzers ;
159+ const {
160+ tokenizer,
161+ language,
162+ use_filter_lowercase,
163+ use_filter_stopwords,
164+ use_filter_ngram,
165+ use_filter_edge_ngram,
166+ filter_ngram_min_length,
167+ filter_ngram_max_length,
168+ use_filter_length,
169+ filter_length_min,
170+ filter_length_max,
171+ } = analyzers ?? { } ;
172+ if ( tokenizer !== undefined ) {
173+ info . push ( fulltextIndexAnalyzersFormatter ( 'tokenizer' , tokenizer ) ) ;
174+ }
175+ if ( language !== undefined ) {
176+ info . push ( fulltextIndexAnalyzersFormatter ( 'language' , language ) ) ;
177+ }
178+ if ( use_filter_lowercase !== undefined ) {
179+ info . push ( fulltextIndexAnalyzersFormatter ( 'use_filter_lowercase' , use_filter_lowercase ) ) ;
180+ }
181+ if ( use_filter_stopwords !== undefined ) {
182+ info . push ( fulltextIndexAnalyzersFormatter ( 'use_filter_stopwords' , use_filter_stopwords ) ) ;
183+ }
184+ if ( use_filter_ngram !== undefined ) {
185+ info . push ( fulltextIndexAnalyzersFormatter ( 'use_filter_ngram' , use_filter_ngram ) ) ;
186+ }
187+ if ( use_filter_edge_ngram !== undefined ) {
188+ info . push ( fulltextIndexAnalyzersFormatter ( 'use_filter_edge_ngram' , use_filter_edge_ngram ) ) ;
189+ }
190+ if ( filter_ngram_min_length !== undefined ) {
191+ info . push (
192+ fulltextIndexAnalyzersFormatter ( 'filter_ngram_min_length' , filter_ngram_min_length ) ,
193+ ) ;
194+ }
195+ if ( filter_ngram_max_length !== undefined ) {
196+ info . push (
197+ fulltextIndexAnalyzersFormatter ( 'filter_ngram_max_length' , filter_ngram_max_length ) ,
198+ ) ;
199+ }
200+ if ( use_filter_length !== undefined ) {
201+ info . push ( fulltextIndexAnalyzersFormatter ( 'use_filter_length' , use_filter_length ) ) ;
202+ }
203+ if ( filter_length_min !== undefined ) {
204+ info . push ( fulltextIndexAnalyzersFormatter ( 'filter_length_min' , filter_length_min ) ) ;
205+ }
206+ if ( filter_length_max !== undefined ) {
207+ info . push ( fulltextIndexAnalyzersFormatter ( 'filter_length_max' , filter_length_max ) ) ;
91208 }
92209
93210 return info ;
94211}
212+
213+ /* eslint-enable camelcase */
0 commit comments