@@ -188,46 +188,43 @@ export enum SchemaFieldTypes {
188188 VECTOR = 'VECTOR' ,
189189 GEOSHAPE = 'GEOSHAPE'
190190}
191-
192- export interface MissingValues {
193- INDEXEMPTY ?: boolean ;
194- INDEXMISSING ?: boolean ;
195- }
196-
197- function pushMissingValues ( args : RedisCommandArguments , missingValues ?: MissingValues ) {
198- if ( ! missingValues ) {
199- return ;
200- }
201-
202- if ( missingValues . INDEXEMPTY ) {
203- args . push ( "INDEXEMPTY" ) ;
204- }
205-
206- if ( missingValues . INDEXMISSING ) {
207- args . push ( "INDEXMISSING" ) ;
208- }
209- }
210191
211192type CreateSchemaField <
212193 T extends SchemaFieldTypes ,
213194 E = Record < PropertyKey , unknown >
214195> = T | ( {
215196 type : T ;
216197 AS ?: string ;
217- MISSING_VALUES ?: MissingValues ;
198+ INDEXMISSING ?: boolean ;
218199} & E ) ;
219200
201+ type CommonFieldArguments = {
202+ SORTABLE ?: boolean | 'UNF' ;
203+ NOINDEX ?: boolean ;
204+ } ;
205+
220206type CreateSchemaCommonField <
221207 T extends SchemaFieldTypes ,
222208 E = Record < PropertyKey , unknown >
223209> = CreateSchemaField <
224210 T ,
225- ( {
226- SORTABLE ?: true | 'UNF' ;
227- NOINDEX ?: true ;
228- } & E )
211+ ( CommonFieldArguments & E )
229212> ;
230213
214+ function pushCommonFieldArguments ( args : RedisCommandArguments , fieldOptions : CommonFieldArguments ) {
215+ if ( fieldOptions . SORTABLE ) {
216+ args . push ( 'SORTABLE' ) ;
217+
218+ if ( fieldOptions . SORTABLE === 'UNF' ) {
219+ args . push ( 'UNF' ) ;
220+ }
221+ }
222+
223+ if ( fieldOptions . NOINDEX ) {
224+ args . push ( 'NOINDEX' ) ;
225+ }
226+ }
227+
231228export enum SchemaTextFieldPhonetics {
232229 DM_EN = 'dm:en' ,
233230 DM_FR = 'dm:fr' ,
@@ -240,6 +237,7 @@ type CreateSchemaTextField = CreateSchemaCommonField<SchemaFieldTypes.TEXT, {
240237 WEIGHT ?: number ;
241238 PHONETIC ?: SchemaTextFieldPhonetics ;
242239 WITHSUFFIXTRIE ?: boolean ;
240+ INDEXEMPTY ?: boolean ;
243241} > ;
244242
245243type CreateSchemaNumericField = CreateSchemaCommonField < SchemaFieldTypes . NUMERIC > ;
@@ -250,6 +248,7 @@ type CreateSchemaTagField = CreateSchemaCommonField<SchemaFieldTypes.TAG, {
250248 SEPARATOR ?: string ;
251249 CASESENSITIVE ?: true ;
252250 WITHSUFFIXTRIE ?: boolean ;
251+ INDEXEMPTY ?: boolean ;
253252} > ;
254253
255254export enum VectorAlgorithms {
@@ -297,7 +296,7 @@ export interface RediSearchSchema {
297296 CreateSchemaTagField |
298297 CreateSchemaFlatVectorField |
299298 CreateSchemaHNSWVectorField |
300- CreateSchemaGeoShapeField
299+ CreateSchemaGeoShapeField ;
301300}
302301
303302export function pushSchema ( args : RedisCommandArguments , schema : RediSearchSchema ) {
@@ -333,13 +332,17 @@ export function pushSchema(args: RedisCommandArguments, schema: RediSearchSchema
333332 args . push ( 'WITHSUFFIXTRIE' ) ;
334333 }
335334
336- pushMissingValues ( args , fieldOptions . MISSING_VALUES ) ;
335+ pushCommonFieldArguments ( args , fieldOptions ) ;
336+
337+ if ( fieldOptions . INDEXEMPTY ) {
338+ args . push ( 'INDEXEMPTY' ) ;
339+ }
337340
338341 break ;
339342
340343 case SchemaFieldTypes . NUMERIC :
341344 case SchemaFieldTypes . GEO :
342- pushMissingValues ( args , fieldOptions . MISSING_VALUES ) ;
345+ pushCommonFieldArguments ( args , fieldOptions ) ;
343346 break ;
344347
345348 case SchemaFieldTypes . TAG :
@@ -355,7 +358,11 @@ export function pushSchema(args: RedisCommandArguments, schema: RediSearchSchema
355358 args . push ( 'WITHSUFFIXTRIE' ) ;
356359 }
357360
358- pushMissingValues ( args , fieldOptions . MISSING_VALUES ) ;
361+ pushCommonFieldArguments ( args , fieldOptions ) ;
362+
363+ if ( fieldOptions . INDEXEMPTY ) {
364+ args . push ( 'INDEXEMPTY' ) ;
365+ }
359366
360367 break ;
361368
@@ -398,30 +405,20 @@ export function pushSchema(args: RedisCommandArguments, schema: RediSearchSchema
398405 }
399406 } ) ;
400407
401- pushMissingValues ( args , fieldOptions . MISSING_VALUES ) ;
402-
403- continue ; // vector fields do not contain SORTABLE and NOINDEX options
408+ break ;
404409
405410 case SchemaFieldTypes . GEOSHAPE :
406411 if ( fieldOptions . COORD_SYSTEM !== undefined ) {
407412 args . push ( 'COORD_SYSTEM' , fieldOptions . COORD_SYSTEM ) ;
408413 }
409414
410- pushMissingValues ( args , fieldOptions . MISSING_VALUES ) ;
411-
412- continue ; // geo shape fields do not contain SORTABLE and NOINDEX options
413- }
414-
415- if ( fieldOptions . SORTABLE ) {
416- args . push ( 'SORTABLE' ) ;
415+ pushCommonFieldArguments ( args , fieldOptions ) ;
417416
418- if ( fieldOptions . SORTABLE === 'UNF' ) {
419- args . push ( 'UNF' ) ;
420- }
417+ break ;
421418 }
422419
423- if ( fieldOptions . NOINDEX ) {
424- args . push ( 'NOINDEX ' ) ;
420+ if ( fieldOptions . INDEXMISSING ) {
421+ args . push ( 'INDEXMISSING ' ) ;
425422 }
426423 }
427424}
0 commit comments