You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-07 13:22:56 +03:00
@@ -1,7 +1,7 @@
|
|||||||
import { strict as assert } from 'assert';
|
import { strict as assert } from 'assert';
|
||||||
import testUtils, { GLOBAL } from '../test-utils';
|
import testUtils, { GLOBAL } from '../test-utils';
|
||||||
import { transformArguments } from './CREATE';
|
import { transformArguments } from './CREATE';
|
||||||
import { SchemaFieldTypes, SchemaTextFieldPhonetics, RedisSearchLanguages, VectorAlgorithms } from '.';
|
import { SchemaFieldTypes, SchemaTextFieldPhonetics, RedisSearchLanguages, VectorAlgorithms, SCHEMA_GEO_SHAPE_COORD_SYSTEM } from '.';
|
||||||
|
|
||||||
describe('CREATE', () => {
|
describe('CREATE', () => {
|
||||||
describe('transformArguments', () => {
|
describe('transformArguments', () => {
|
||||||
@@ -196,6 +196,42 @@ describe('CREATE', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('GEOSHAPE', () => {
|
||||||
|
describe('without options', () => {
|
||||||
|
it('SCHEMA_FIELD_TYPE.GEOSHAPE', () => {
|
||||||
|
assert.deepEqual(
|
||||||
|
transformArguments('index', {
|
||||||
|
field: SchemaFieldTypes.GEOSHAPE
|
||||||
|
}),
|
||||||
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'GEOSHAPE']
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('{ type: SCHEMA_FIELD_TYPE.GEOSHAPE }', () => {
|
||||||
|
assert.deepEqual(
|
||||||
|
transformArguments('index', {
|
||||||
|
field: {
|
||||||
|
type: SchemaFieldTypes.GEOSHAPE
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'GEOSHAPE']
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('with COORD_SYSTEM', () => {
|
||||||
|
assert.deepEqual(
|
||||||
|
transformArguments('index', {
|
||||||
|
field: {
|
||||||
|
type: SchemaFieldTypes.GEOSHAPE,
|
||||||
|
COORD_SYSTEM: SCHEMA_GEO_SHAPE_COORD_SYSTEM.SPHERICAL
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
['FT.CREATE', 'index', 'SCHEMA', 'field', 'GEOSHAPE', 'COORD_SYSTEM', 'SPHERICAL']
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('with generic options', () => {
|
describe('with generic options', () => {
|
||||||
it('with AS', () => {
|
it('with AS', () => {
|
||||||
assert.deepEqual(
|
assert.deepEqual(
|
||||||
|
@@ -185,7 +185,8 @@ export enum SchemaFieldTypes {
|
|||||||
NUMERIC = 'NUMERIC',
|
NUMERIC = 'NUMERIC',
|
||||||
GEO = 'GEO',
|
GEO = 'GEO',
|
||||||
TAG = 'TAG',
|
TAG = 'TAG',
|
||||||
VECTOR = 'VECTOR'
|
VECTOR = 'VECTOR',
|
||||||
|
GEOSHAPE = 'GEOSHAPE'
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateSchemaField<
|
type CreateSchemaField<
|
||||||
@@ -257,6 +258,17 @@ type CreateSchemaHNSWVectorField = CreateSchemaVectorField<VectorAlgorithms.HNSW
|
|||||||
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 CreateSchemaGeoShapeField = CreateSchemaCommonField<SchemaFieldTypes.GEOSHAPE, {
|
||||||
|
COORD_SYSTEM?: SchemaGeoShapeFieldCoordSystem;
|
||||||
|
}>;
|
||||||
|
|
||||||
export interface RediSearchSchema {
|
export interface RediSearchSchema {
|
||||||
[field: string]:
|
[field: string]:
|
||||||
CreateSchemaTextField |
|
CreateSchemaTextField |
|
||||||
@@ -264,7 +276,8 @@ export interface RediSearchSchema {
|
|||||||
CreateSchemaGeoField |
|
CreateSchemaGeoField |
|
||||||
CreateSchemaTagField |
|
CreateSchemaTagField |
|
||||||
CreateSchemaFlatVectorField |
|
CreateSchemaFlatVectorField |
|
||||||
CreateSchemaHNSWVectorField;
|
CreateSchemaHNSWVectorField |
|
||||||
|
CreateSchemaGeoShapeField
|
||||||
}
|
}
|
||||||
|
|
||||||
export function pushSchema(args: RedisCommandArguments, schema: RediSearchSchema) {
|
export function pushSchema(args: RedisCommandArguments, schema: RediSearchSchema) {
|
||||||
@@ -361,6 +374,13 @@ export function pushSchema(args: RedisCommandArguments, schema: RediSearchSchema
|
|||||||
});
|
});
|
||||||
|
|
||||||
continue; // vector fields do not contain SORTABLE and NOINDEX options
|
continue; // vector fields do not contain SORTABLE and NOINDEX options
|
||||||
|
|
||||||
|
case SchemaFieldTypes.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