You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-07 13:22:56 +03:00
fix #2614 - add support for RediSearch GEOSHAPE fields
This commit is contained in:
@@ -194,6 +194,42 @@ describe('FT.CREATE', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('GEOSHAPE', () => {
|
||||||
|
describe('without options', () => {
|
||||||
|
it('SCHEMA_FIELD_TYPE.GEOSHAPE', () => {
|
||||||
|
assert.deepEqual(
|
||||||
|
CREATE.transformArguments('index', {
|
||||||
|
field: SCHEMA_FIELD_TYPE.GEOSHAPE
|
||||||
|
}),
|
||||||
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'GEOSHAPE']
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('{ type: SCHEMA_FIELD_TYPE.GEOSHAPE }', () => {
|
||||||
|
assert.deepEqual(
|
||||||
|
CREATE.transformArguments('index', {
|
||||||
|
field: {
|
||||||
|
type: SCHEMA_FIELD_TYPE.GEOSHAPE
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'GEOSHAPE']
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('with COORD_SYSTEM', () => {
|
||||||
|
assert.deepEqual(
|
||||||
|
CREATE.transformArguments('index', {
|
||||||
|
field: {
|
||||||
|
type: SCHEMA_FIELD_TYPE.GEOSHAPE,
|
||||||
|
COORD_SYSTEM: 'SPHERICAL'
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'GEOSHAPE', 'COORD_SYSTEM', 'SPHERICAL']
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('with AS', () => {
|
it('with AS', () => {
|
||||||
assert.deepEqual(
|
assert.deepEqual(
|
||||||
|
@@ -7,7 +7,8 @@ export const SCHEMA_FIELD_TYPE = {
|
|||||||
NUMERIC: 'NUMERIC',
|
NUMERIC: 'NUMERIC',
|
||||||
GEO: 'GEO',
|
GEO: 'GEO',
|
||||||
TAG: 'TAG',
|
TAG: 'TAG',
|
||||||
VECTOR: 'VECTOR'
|
VECTOR: 'VECTOR',
|
||||||
|
GEOSHAPE: 'GEOSHAPE'
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export type SchemaFieldType = typeof SCHEMA_FIELD_TYPE[keyof typeof SCHEMA_FIELD_TYPE];
|
export type SchemaFieldType = typeof SCHEMA_FIELD_TYPE[keyof typeof SCHEMA_FIELD_TYPE];
|
||||||
@@ -85,6 +86,17 @@ type SchemaHNSWVectorField = SchemaVectorField<typeof SCHEMA_VECTOR_FIELD_ALGORI
|
|||||||
EF_RUNTIME?: number;
|
EF_RUNTIME?: number;
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
|
export const SCHEMA_GEO_SHAPE_COORD_SYSTEM = {
|
||||||
|
SPHERICAL: 'SPHERICAL',
|
||||||
|
FLAT: 'FLAT'
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
export type SchemaGeoShapeFieldCoordSystem = typeof SCHEMA_GEO_SHAPE_COORD_SYSTEM[keyof typeof SCHEMA_GEO_SHAPE_COORD_SYSTEM];
|
||||||
|
|
||||||
|
type SchemaGeoShapeField = SchemaField<typeof SCHEMA_FIELD_TYPE['GEOSHAPE'], {
|
||||||
|
COORD_SYSTEM?: SchemaGeoShapeFieldCoordSystem;
|
||||||
|
}>;
|
||||||
|
|
||||||
export interface RediSearchSchema {
|
export interface RediSearchSchema {
|
||||||
[field: string]:(
|
[field: string]:(
|
||||||
SchemaTextField |
|
SchemaTextField |
|
||||||
@@ -92,7 +104,8 @@ export interface RediSearchSchema {
|
|||||||
SchemaGeoField |
|
SchemaGeoField |
|
||||||
SchemaTagField |
|
SchemaTagField |
|
||||||
SchemaFlatVectorField |
|
SchemaFlatVectorField |
|
||||||
SchemaHNSWVectorField
|
SchemaHNSWVectorField |
|
||||||
|
SchemaGeoShapeField
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,6 +204,13 @@ export function pushSchema(args: CommandArguments, schema: RediSearchSchema) {
|
|||||||
args[lengthIndex] = (args.length - lengthIndex - 1).toString();
|
args[lengthIndex] = (args.length - lengthIndex - 1).toString();
|
||||||
|
|
||||||
continue; // vector fields do not contain SORTABLE and NOINDEX options
|
continue; // vector fields do not contain SORTABLE and NOINDEX options
|
||||||
|
|
||||||
|
case SCHEMA_FIELD_TYPE.GEOSHAPE:
|
||||||
|
if (fieldOptions.COORD_SYSTEM !== undefined) {
|
||||||
|
args.push('COORD_SYSTEM', fieldOptions.COORD_SYSTEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
continue; // geo shape fields do not contain SORTABLE and NOINDEX options
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fieldOptions.SORTABLE) {
|
if (fieldOptions.SORTABLE) {
|
||||||
|
Reference in New Issue
Block a user