Skip to content

Commit c1937e8

Browse files
authored
fix(search): correct INDEXMISSING placement (#3179)
fixes #3170
1 parent b6ff05f commit c1937e8

2 files changed

Lines changed: 61 additions & 9 deletions

File tree

packages/search/lib/commands/CREATE.spec.ts

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,25 @@ describe('FT.CREATE', () => {
233233
]
234234
);
235235
});
236+
237+
it('with INDEXMISSING', () => {
238+
assert.deepEqual(
239+
parseArgs(CREATE, 'index', {
240+
field: {
241+
type: SCHEMA_FIELD_TYPE.VECTOR,
242+
ALGORITHM: SCHEMA_VECTOR_FIELD_ALGORITHM.FLAT,
243+
TYPE: 'FLOAT32',
244+
DIM: 2,
245+
DISTANCE_METRIC: 'L2',
246+
INDEXMISSING: true
247+
}
248+
}),
249+
[
250+
'FT.CREATE', 'index', 'SCHEMA', 'field', 'VECTOR', 'FLAT', '6', 'TYPE',
251+
'FLOAT32', 'DIM', '2', 'DISTANCE_METRIC', 'L2', 'INDEXMISSING'
252+
]
253+
);
254+
});
236255
});
237256

238257
describe('GEOSHAPE', () => {
@@ -270,7 +289,7 @@ describe('FT.CREATE', () => {
270289
);
271290
});
272291
});
273-
292+
274293
it('with AS', () => {
275294
assert.deepEqual(
276295
parseArgs(CREATE, 'index', {
@@ -514,6 +533,23 @@ describe('FT.CREATE', () => {
514533
});
515534
});
516535

536+
testUtils.testWithClient('no', async client => {
537+
await client.ft.create(
538+
'idx:example',
539+
{
540+
vector1: {
541+
type: 'VECTOR',
542+
ALGORITHM: 'HNSW',
543+
TYPE: 'FLOAT32',
544+
DIM: 5,
545+
DISTANCE_METRIC: 'L2',
546+
INDEXMISSING: true,
547+
},
548+
},
549+
{ ON: 'HASH' }
550+
);
551+
}, GLOBAL.SERVERS.OPEN);
552+
517553
testUtils.testWithClient('client.ft.create', async client => {
518554
assert.equal(
519555
await client.ft.create('index', {
@@ -578,7 +614,7 @@ describe('FT.CREATE', () => {
578614
}),
579615
"OK"
580616
);
581-
617+
582618
assert.equal(
583619
await client.ft.create("index_int8", {
584620
field: {

packages/search/lib/commands/CREATE.ts

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { CommandParser } from '@redis/client/dist/lib/client/parser';
2-
import { RedisArgument, SimpleStringReply, Command } from '@redis/client/dist/lib/RESP/types';
3-
import { RedisVariadicArgument, parseOptionalVariadicArgument } from '@redis/client/dist/lib/commands/generic-transformers';
1+
import { CommandParser } from '@redis/client/lib/client/parser';
2+
import { RedisArgument, SimpleStringReply, Command } from '@redis/client/lib/RESP/types';
3+
import { RedisVariadicArgument, parseOptionalVariadicArgument } from '@redis/client/lib/commands/generic-transformers';
44

55
export const SCHEMA_FIELD_TYPE = {
66
TEXT: 'TEXT',
@@ -195,12 +195,12 @@ export function parseSchema(parser: CommandParser, schema: RediSearchSchema) {
195195

196196
parser.push(fieldOptions.type);
197197

198-
if (fieldOptions.INDEXMISSING) {
199-
parser.push('INDEXMISSING');
200-
}
201-
202198
switch (fieldOptions.type) {
203199
case SCHEMA_FIELD_TYPE.TEXT:
200+
if (fieldOptions.INDEXMISSING) {
201+
parser.push('INDEXMISSING');
202+
}
203+
204204
if (fieldOptions.NOSTEM) {
205205
parser.push('NOSTEM');
206206
}
@@ -226,10 +226,18 @@ export function parseSchema(parser: CommandParser, schema: RediSearchSchema) {
226226

227227
case SCHEMA_FIELD_TYPE.NUMERIC:
228228
case SCHEMA_FIELD_TYPE.GEO:
229+
if (fieldOptions.INDEXMISSING) {
230+
parser.push('INDEXMISSING');
231+
}
232+
229233
parseCommonSchemaFieldOptions(parser, fieldOptions)
230234
break;
231235

232236
case SCHEMA_FIELD_TYPE.TAG:
237+
if (fieldOptions.INDEXMISSING) {
238+
parser.push('INDEXMISSING');
239+
}
240+
233241
if (fieldOptions.SEPARATOR) {
234242
parser.push('SEPARATOR', fieldOptions.SEPARATOR);
235243
}
@@ -320,13 +328,21 @@ export function parseSchema(parser: CommandParser, schema: RediSearchSchema) {
320328
}
321329
parser.pushVariadicWithLength(args);
322330

331+
if (fieldOptions.INDEXMISSING) {
332+
parser.push('INDEXMISSING');
333+
}
334+
323335
break;
324336

325337
case SCHEMA_FIELD_TYPE.GEOSHAPE:
326338
if (fieldOptions.COORD_SYSTEM !== undefined) {
327339
parser.push('COORD_SYSTEM', fieldOptions.COORD_SYSTEM);
328340
}
329341

342+
if (fieldOptions.INDEXMISSING) {
343+
parser.push('INDEXMISSING');
344+
}
345+
330346
break;
331347
}
332348
}

0 commit comments

Comments
 (0)