@@ -188,46 +188,43 @@ export enum SchemaFieldTypes {
188
188
VECTOR = 'VECTOR' ,
189
189
GEOSHAPE = 'GEOSHAPE'
190
190
}
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
- }
210
191
211
192
type CreateSchemaField <
212
193
T extends SchemaFieldTypes ,
213
194
E = Record < PropertyKey , unknown >
214
195
> = T | ( {
215
196
type : T ;
216
197
AS ?: string ;
217
- MISSING_VALUES ?: MissingValues ;
198
+ INDEXMISSING ?: boolean ;
218
199
} & E ) ;
219
200
201
+ type CommonFieldArguments = {
202
+ SORTABLE ?: boolean | 'UNF' ;
203
+ NOINDEX ?: boolean ;
204
+ } ;
205
+
220
206
type CreateSchemaCommonField <
221
207
T extends SchemaFieldTypes ,
222
208
E = Record < PropertyKey , unknown >
223
209
> = CreateSchemaField <
224
210
T ,
225
- ( {
226
- SORTABLE ?: true | 'UNF' ;
227
- NOINDEX ?: true ;
228
- } & E )
211
+ ( CommonFieldArguments & E )
229
212
> ;
230
213
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
+
231
228
export enum SchemaTextFieldPhonetics {
232
229
DM_EN = 'dm:en' ,
233
230
DM_FR = 'dm:fr' ,
@@ -240,6 +237,7 @@ type CreateSchemaTextField = CreateSchemaCommonField<SchemaFieldTypes.TEXT, {
240
237
WEIGHT ?: number ;
241
238
PHONETIC ?: SchemaTextFieldPhonetics ;
242
239
WITHSUFFIXTRIE ?: boolean ;
240
+ INDEXEMPTY ?: boolean ;
243
241
} > ;
244
242
245
243
type CreateSchemaNumericField = CreateSchemaCommonField < SchemaFieldTypes . NUMERIC > ;
@@ -250,6 +248,7 @@ type CreateSchemaTagField = CreateSchemaCommonField<SchemaFieldTypes.TAG, {
250
248
SEPARATOR ?: string ;
251
249
CASESENSITIVE ?: true ;
252
250
WITHSUFFIXTRIE ?: boolean ;
251
+ INDEXEMPTY ?: boolean ;
253
252
} > ;
254
253
255
254
export enum VectorAlgorithms {
@@ -297,7 +296,7 @@ export interface RediSearchSchema {
297
296
CreateSchemaTagField |
298
297
CreateSchemaFlatVectorField |
299
298
CreateSchemaHNSWVectorField |
300
- CreateSchemaGeoShapeField
299
+ CreateSchemaGeoShapeField ;
301
300
}
302
301
303
302
export function pushSchema ( args : RedisCommandArguments , schema : RediSearchSchema ) {
@@ -333,13 +332,17 @@ export function pushSchema(args: RedisCommandArguments, schema: RediSearchSchema
333
332
args . push ( 'WITHSUFFIXTRIE' ) ;
334
333
}
335
334
336
- pushMissingValues ( args , fieldOptions . MISSING_VALUES ) ;
335
+ pushCommonFieldArguments ( args , fieldOptions ) ;
336
+
337
+ if ( fieldOptions . INDEXEMPTY ) {
338
+ args . push ( 'INDEXEMPTY' ) ;
339
+ }
337
340
338
341
break ;
339
342
340
343
case SchemaFieldTypes . NUMERIC :
341
344
case SchemaFieldTypes . GEO :
342
- pushMissingValues ( args , fieldOptions . MISSING_VALUES ) ;
345
+ pushCommonFieldArguments ( args , fieldOptions ) ;
343
346
break ;
344
347
345
348
case SchemaFieldTypes . TAG :
@@ -355,7 +358,11 @@ export function pushSchema(args: RedisCommandArguments, schema: RediSearchSchema
355
358
args . push ( 'WITHSUFFIXTRIE' ) ;
356
359
}
357
360
358
- pushMissingValues ( args , fieldOptions . MISSING_VALUES ) ;
361
+ pushCommonFieldArguments ( args , fieldOptions ) ;
362
+
363
+ if ( fieldOptions . INDEXEMPTY ) {
364
+ args . push ( 'INDEXEMPTY' ) ;
365
+ }
359
366
360
367
break ;
361
368
@@ -398,30 +405,20 @@ export function pushSchema(args: RedisCommandArguments, schema: RediSearchSchema
398
405
}
399
406
} ) ;
400
407
401
- pushMissingValues ( args , fieldOptions . MISSING_VALUES ) ;
402
-
403
- continue ; // vector fields do not contain SORTABLE and NOINDEX options
408
+ break ;
404
409
405
410
case SchemaFieldTypes . GEOSHAPE :
406
411
if ( fieldOptions . COORD_SYSTEM !== undefined ) {
407
412
args . push ( 'COORD_SYSTEM' , fieldOptions . COORD_SYSTEM ) ;
408
413
}
409
414
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 ) ;
417
416
418
- if ( fieldOptions . SORTABLE === 'UNF' ) {
419
- args . push ( 'UNF' ) ;
420
- }
417
+ break ;
421
418
}
422
419
423
- if ( fieldOptions . NOINDEX ) {
424
- args . push ( 'NOINDEX ' ) ;
420
+ if ( fieldOptions . INDEXMISSING ) {
421
+ args . push ( 'INDEXMISSING ' ) ;
425
422
}
426
423
}
427
424
}
0 commit comments