redis-vl 0.1.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +1 -1
  2. package/dist/index.d.ts +14 -13
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +7 -6
  5. package/dist/index.js.map +1 -1
  6. package/dist/indexes/search-index.d.ts +29 -4
  7. package/dist/indexes/search-index.d.ts.map +1 -1
  8. package/dist/indexes/search-index.js +43 -16
  9. package/dist/indexes/search-index.js.map +1 -1
  10. package/dist/query/{aggregation.d.ts → aggregate/aggregation.d.ts} +1 -1
  11. package/dist/query/aggregate/aggregation.d.ts.map +1 -0
  12. package/dist/query/{aggregation.js → aggregate/aggregation.js} +2 -2
  13. package/dist/query/aggregate/aggregation.js.map +1 -0
  14. package/dist/query/hybrid.d.ts +10 -4
  15. package/dist/query/hybrid.d.ts.map +1 -1
  16. package/dist/query/hybrid.js +14 -10
  17. package/dist/query/hybrid.js.map +1 -1
  18. package/dist/query/index.d.ts +7 -7
  19. package/dist/query/index.d.ts.map +1 -1
  20. package/dist/query/index.js +7 -7
  21. package/dist/query/index.js.map +1 -1
  22. package/dist/query/search/base.d.ts +166 -0
  23. package/dist/query/search/base.d.ts.map +1 -0
  24. package/dist/query/search/base.js +191 -0
  25. package/dist/query/search/base.js.map +1 -0
  26. package/dist/query/{count.d.ts → search/count.d.ts} +2 -6
  27. package/dist/query/search/count.d.ts.map +1 -0
  28. package/dist/query/{count.js → search/count.js} +3 -9
  29. package/dist/query/search/count.js.map +1 -0
  30. package/dist/query/{filter-query.d.ts → search/filter-query.d.ts} +3 -8
  31. package/dist/query/search/filter-query.d.ts.map +1 -0
  32. package/dist/query/{filter-query.js → search/filter-query.js} +10 -14
  33. package/dist/query/search/filter-query.js.map +1 -0
  34. package/dist/query/{range.d.ts → search/range.d.ts} +4 -16
  35. package/dist/query/search/range.d.ts.map +1 -0
  36. package/dist/query/{range.js → search/range.js} +8 -35
  37. package/dist/query/search/range.js.map +1 -0
  38. package/dist/query/{text.d.ts → search/text.d.ts} +5 -9
  39. package/dist/query/search/text.d.ts.map +1 -0
  40. package/dist/query/{text.js → search/text.js} +13 -14
  41. package/dist/query/search/text.js.map +1 -0
  42. package/dist/query/{vector.d.ts → search/vector.d.ts} +7 -33
  43. package/dist/query/search/vector.d.ts.map +1 -0
  44. package/dist/query/{vector.js → search/vector.js} +8 -37
  45. package/dist/query/search/vector.js.map +1 -0
  46. package/dist/redis/client-types.d.ts +1 -1
  47. package/dist/redis/client-types.js +1 -1
  48. package/dist/schema/schema.d.ts +2 -2
  49. package/dist/storage/base-storage.d.ts +0 -1
  50. package/dist/storage/base-storage.d.ts.map +1 -1
  51. package/dist/storage/base-storage.js.map +1 -1
  52. package/package.json +13 -13
  53. package/dist/query/aggregation.d.ts.map +0 -1
  54. package/dist/query/aggregation.js.map +0 -1
  55. package/dist/query/base.d.ts +0 -77
  56. package/dist/query/base.d.ts.map +0 -1
  57. package/dist/query/base.js +0 -14
  58. package/dist/query/base.js.map +0 -1
  59. package/dist/query/count.d.ts.map +0 -1
  60. package/dist/query/count.js.map +0 -1
  61. package/dist/query/filter-query.d.ts.map +0 -1
  62. package/dist/query/filter-query.js.map +0 -1
  63. package/dist/query/range.d.ts.map +0 -1
  64. package/dist/query/range.js.map +0 -1
  65. package/dist/query/text.d.ts.map +0 -1
  66. package/dist/query/text.js.map +0 -1
  67. package/dist/query/vector.d.ts.map +0 -1
  68. package/dist/query/vector.js.map +0 -1
  69. package/dist/redis/protocol.d.ts +0 -34
  70. package/dist/redis/protocol.d.ts.map +0 -1
  71. package/dist/redis/protocol.js +0 -47
  72. package/dist/redis/protocol.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC"}
@@ -2,13 +2,13 @@
2
2
  * @module Query
3
3
  * Query builders for Redis search operations.
4
4
  */
5
- export * from './base.js';
6
- export * from './vector.js';
5
+ export * from './search/base.js';
6
+ export * from './search/vector.js';
7
7
  export * from './filter.js';
8
- export * from './filter-query.js';
9
- export * from './count.js';
10
- export * from './range.js';
11
- export * from './text.js';
8
+ export * from './search/filter-query.js';
9
+ export * from './search/count.js';
10
+ export * from './search/range.js';
11
+ export * from './search/text.js';
12
12
  export * from './hybrid.js';
13
- export * from './aggregation.js';
13
+ export * from './aggregate/aggregation.js';
14
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * @module Query
3
+ * Query builders for Redis search operations.
4
+ */
5
+ import { VectorDataType } from '../../schema/types.js';
6
+ import type { FilterExpression } from '../filter.js';
7
+ /**
8
+ * A filter clause supplied to a query - either a pre-built {@link FilterExpression}
9
+ * or a raw Redis Search filter string (e.g. `'@category:{electronics}'`).
10
+ */
11
+ export type FilterInput = string | FilterExpression;
12
+ /**
13
+ * Render a {@link FilterInput} to its Redis Search string form, treating
14
+ * `undefined` and the wildcard expression as "no filter" (`*`).
15
+ */
16
+ export declare function renderFilter(filter: FilterInput | undefined): string;
17
+ /**
18
+ * Sort direction for Redis search results.
19
+ */
20
+ export type SortDirection = 'ASC' | 'DESC';
21
+ /**
22
+ * A normalized sort field specification.
23
+ */
24
+ export interface SortField {
25
+ field: string;
26
+ direction: SortDirection;
27
+ }
28
+ /**
29
+ * Common query configuration shared by all FT.SEARCH query types.
30
+ */
31
+ export interface BaseQueryConfig {
32
+ /** Filter expression used as the base Redis query string. */
33
+ filter?: FilterInput;
34
+ /** Fields to return in results. */
35
+ returnFields?: string[];
36
+ /** Offset for pagination. */
37
+ offset?: number;
38
+ /** Number of results to return. */
39
+ limit?: number;
40
+ }
41
+ /**
42
+ * Options for sorting query results.
43
+ */
44
+ export interface SortByOptions {
45
+ /** Sort direction. Defaults to ASC. */
46
+ direction?: SortDirection;
47
+ }
48
+ /**
49
+ * Base abstract class for all FT.SEARCH query types.
50
+ *
51
+ * This class owns shared query state. Subclasses remain responsible for
52
+ * building the final Redis query string for their specific query mode.
53
+ */
54
+ export declare abstract class BaseQuery {
55
+ private _filter?;
56
+ private _returnFields?;
57
+ private _offset?;
58
+ private _limit?;
59
+ private readonly _sortFields;
60
+ /** When true, ask Redis to return only document ids/counts (FT.SEARCH NOCONTENT). */
61
+ noContent?: boolean;
62
+ /** Optional RediSearch scorer to apply when ranking text results. */
63
+ textScorer?: string;
64
+ protected constructor(config?: BaseQueryConfig);
65
+ /** Fields to return in results. */
66
+ get returnFields(): string[] | undefined;
67
+ /** Sort fields collected for query execution. */
68
+ get sortFields(): SortField[];
69
+ /** Filter expression used as the base Redis query string. */
70
+ get filter(): FilterInput | undefined;
71
+ /** Offset for pagination. */
72
+ get offset(): number | undefined;
73
+ /** Number of results to return. */
74
+ get limit(): number | undefined;
75
+ /** Set or clear the query filter. */
76
+ setFilter(filter?: FilterInput | null): this;
77
+ /** Set or clear return fields. */
78
+ setReturnFields(fields?: string[]): this;
79
+ /** Set pagination values. */
80
+ paging(offset: number, limit: number): this;
81
+ /** Set the sort field, replacing any previous sort. Pass `null` to clear. */
82
+ sortBy(field: string | null, options?: SortByOptions): this;
83
+ /** Build the Redis query string. */
84
+ abstract buildQuery(): string;
85
+ /** Build the query parameters for Redis. */
86
+ buildParams(): Record<string, unknown>;
87
+ private setPagingFromConfig;
88
+ }
89
+ /**
90
+ * Common vector query configuration.
91
+ */
92
+ export interface BaseVectorQueryConfig extends BaseQueryConfig {
93
+ /** Vector to search with. */
94
+ vector: number[];
95
+ /** Name of the vector field in the index. */
96
+ vectorField: string;
97
+ /** Vector datatype to use when serializing the query vector. */
98
+ datatype?: VectorDataType | string;
99
+ /** Whether to normalize distances during result processing. */
100
+ normalizeDistance?: boolean;
101
+ }
102
+ /**
103
+ * Base abstract class for vector-backed query types.
104
+ */
105
+ export declare abstract class BaseVectorQuery extends BaseQuery {
106
+ private readonly _vector;
107
+ private readonly _vectorField;
108
+ private readonly _datatype;
109
+ private readonly _normalizeDistance;
110
+ protected constructor(config: BaseVectorQueryConfig);
111
+ /** Vector to search with. */
112
+ get vector(): number[];
113
+ /** Name of the vector field in the index. */
114
+ get vectorField(): string;
115
+ /** Vector datatype used when serializing the query vector. */
116
+ get datatype(): VectorDataType;
117
+ /** Whether to normalize distances during result processing. */
118
+ get normalizeDistance(): boolean;
119
+ }
120
+ /**
121
+ * Search result document with optional score.
122
+ */
123
+ export interface SearchDocument<T = Record<string, unknown>> {
124
+ /** Document fields. */
125
+ value: T;
126
+ /** Relevance score (for vector search). */
127
+ score?: number;
128
+ /** Document ID. */
129
+ id: string;
130
+ }
131
+ /**
132
+ * Search result structure.
133
+ */
134
+ export interface SearchResult<T = Record<string, unknown>> {
135
+ /** Total number of results. */
136
+ total: number;
137
+ /** Retrieved documents. */
138
+ documents: SearchDocument<T>[];
139
+ /**
140
+ * Warnings emitted by the server alongside results (e.g. partial
141
+ * results on query timeout, truncated KNN, missing scorer). For
142
+ * `FT.SEARCH` replies these are only populated on RESP3 connections.
143
+ */
144
+ warnings?: string[];
145
+ }
146
+ /**
147
+ * Result returned by {@link SearchIndex.hybridSearch}. Adds the FT.HYBRID
148
+ * specific field (`executionTime`) on top of the standard
149
+ * {@link SearchResult} shape.
150
+ */
151
+ export interface HybridSearchResult<T = Record<string, unknown>> extends SearchResult<T> {
152
+ /** Server-reported query execution time in milliseconds. */
153
+ executionTime?: number;
154
+ }
155
+ /**
156
+ * Options for query execution.
157
+ */
158
+ export interface QueryOptions {
159
+ /** Redis DIALECT version (default: 2 for KNN). */
160
+ dialect?: number;
161
+ /** Sort by field. */
162
+ sortBy?: string;
163
+ /** Sort order. */
164
+ sortOrder?: 'ASC' | 'DESC';
165
+ }
166
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/query/search/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * @module Query
3
+ * Query builders for Redis search operations.
4
+ */
5
+ import { QueryValidationError, SchemaValidationError } from '../../errors.js';
6
+ import { normalizeVectorDataType } from '../../redis/utils.js';
7
+ /**
8
+ * Render a {@link FilterInput} to its Redis Search string form, treating
9
+ * `undefined` and the wildcard expression as "no filter" (`*`).
10
+ */
11
+ export function renderFilter(filter) {
12
+ if (filter === undefined)
13
+ return '*';
14
+ return typeof filter === 'string' ? filter : filter.toString();
15
+ }
16
+ /**
17
+ * Base abstract class for all FT.SEARCH query types.
18
+ *
19
+ * This class owns shared query state. Subclasses remain responsible for
20
+ * building the final Redis query string for their specific query mode.
21
+ */
22
+ export class BaseQuery {
23
+ _filter;
24
+ _returnFields;
25
+ _offset;
26
+ _limit;
27
+ _sortFields = [];
28
+ /** When true, ask Redis to return only document ids/counts (FT.SEARCH NOCONTENT). */
29
+ noContent;
30
+ /** Optional RediSearch scorer to apply when ranking text results. */
31
+ textScorer;
32
+ constructor(config = {}) {
33
+ if (config.filter !== undefined) {
34
+ this.setFilter(config.filter);
35
+ }
36
+ if (config.returnFields !== undefined) {
37
+ this.setReturnFields(config.returnFields);
38
+ }
39
+ if (config.offset !== undefined || config.limit !== undefined) {
40
+ this.setPagingFromConfig(config.offset, config.limit);
41
+ }
42
+ }
43
+ /** Fields to return in results. */
44
+ get returnFields() {
45
+ return this._returnFields ? [...this._returnFields] : undefined;
46
+ }
47
+ /** Sort fields collected for query execution. */
48
+ get sortFields() {
49
+ return this._sortFields.map((field) => ({ ...field }));
50
+ }
51
+ /** Filter expression used as the base Redis query string. */
52
+ get filter() {
53
+ return this._filter;
54
+ }
55
+ /** Offset for pagination. */
56
+ get offset() {
57
+ return this._offset;
58
+ }
59
+ /** Number of results to return. */
60
+ get limit() {
61
+ return this._limit;
62
+ }
63
+ /** Set or clear the query filter. */
64
+ setFilter(filter) {
65
+ if (filter === undefined || filter === null) {
66
+ this._filter = undefined;
67
+ return this;
68
+ }
69
+ const rendered = renderFilter(filter);
70
+ if (rendered.trim() === '') {
71
+ throw new QueryValidationError('filter cannot be empty');
72
+ }
73
+ this._filter = filter;
74
+ return this;
75
+ }
76
+ /** Set or clear return fields. */
77
+ setReturnFields(fields) {
78
+ if (fields === undefined) {
79
+ this._returnFields = undefined;
80
+ return this;
81
+ }
82
+ this._returnFields = validateStringList(fields, 'returnFields');
83
+ return this;
84
+ }
85
+ /** Set pagination values. */
86
+ paging(offset, limit) {
87
+ validateOffset(offset);
88
+ validateLimit(limit);
89
+ this._offset = offset;
90
+ this._limit = limit;
91
+ return this;
92
+ }
93
+ /** Set the sort field, replacing any previous sort. Pass `null` to clear. */
94
+ sortBy(field, options = {}) {
95
+ if (field === null) {
96
+ this._sortFields.length = 0;
97
+ return this;
98
+ }
99
+ const normalizedField = validateNonEmptyString(field, 'sort field');
100
+ const direction = options.direction ?? 'ASC';
101
+ if (direction !== 'ASC' && direction !== 'DESC') {
102
+ throw new QueryValidationError('sort direction must be either ASC or DESC');
103
+ }
104
+ this._sortFields.length = 0;
105
+ this._sortFields.push({ field: normalizedField, direction });
106
+ return this;
107
+ }
108
+ /** Build the query parameters for Redis. */
109
+ buildParams() {
110
+ return {};
111
+ }
112
+ setPagingFromConfig(offset, limit) {
113
+ if (offset !== undefined) {
114
+ validateOffset(offset);
115
+ this._offset = offset;
116
+ }
117
+ if (limit !== undefined) {
118
+ validateLimit(limit);
119
+ this._limit = limit;
120
+ }
121
+ }
122
+ }
123
+ /**
124
+ * Base abstract class for vector-backed query types.
125
+ */
126
+ export class BaseVectorQuery extends BaseQuery {
127
+ _vector;
128
+ _vectorField;
129
+ _datatype;
130
+ _normalizeDistance;
131
+ constructor(config) {
132
+ super(config);
133
+ if (!config.vector || config.vector.length === 0) {
134
+ throw new QueryValidationError('Vector cannot be empty');
135
+ }
136
+ const vectorField = typeof config.vectorField === 'string' ? config.vectorField.trim() : '';
137
+ if (!vectorField) {
138
+ throw new QueryValidationError('vectorField is required');
139
+ }
140
+ this._vector = [...config.vector];
141
+ this._vectorField = vectorField;
142
+ this._normalizeDistance = config.normalizeDistance ?? false;
143
+ try {
144
+ this._datatype = normalizeVectorDataType(config.datatype);
145
+ }
146
+ catch (error) {
147
+ if (error instanceof SchemaValidationError) {
148
+ throw new QueryValidationError(error.message);
149
+ }
150
+ throw error;
151
+ }
152
+ }
153
+ /** Vector to search with. */
154
+ get vector() {
155
+ return [...this._vector];
156
+ }
157
+ /** Name of the vector field in the index. */
158
+ get vectorField() {
159
+ return this._vectorField;
160
+ }
161
+ /** Vector datatype used when serializing the query vector. */
162
+ get datatype() {
163
+ return this._datatype;
164
+ }
165
+ /** Whether to normalize distances during result processing. */
166
+ get normalizeDistance() {
167
+ return this._normalizeDistance;
168
+ }
169
+ }
170
+ function validateStringList(values, label) {
171
+ return values.map((value) => {
172
+ return validateNonEmptyString(value, label);
173
+ });
174
+ }
175
+ function validateNonEmptyString(value, label) {
176
+ if (typeof value !== 'string' || value.trim() === '') {
177
+ throw new QueryValidationError(`${label} cannot be empty`);
178
+ }
179
+ return value.trim();
180
+ }
181
+ function validateOffset(offset) {
182
+ if (!Number.isInteger(offset) || offset < 0) {
183
+ throw new QueryValidationError('offset must be a non-negative integer');
184
+ }
185
+ }
186
+ function validateLimit(limit) {
187
+ if (!Number.isInteger(limit) || limit < 0) {
188
+ throw new QueryValidationError('limit must be a non-negative integer');
189
+ }
190
+ }
191
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/query/search/base.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type BaseQuery, type FilterInput } from './base.js';
1
+ import { BaseQuery, type FilterInput } from './base.js';
2
2
  /**
3
3
  * Configuration for {@link CountQuery}.
4
4
  */
@@ -20,13 +20,9 @@ export interface CountQueryConfig {
20
20
  * const total = (await index.search(new CountQuery({ filter: Tag('brand').eq('nike') }))).total;
21
21
  * ```
22
22
  */
23
- export declare class CountQuery implements BaseQuery {
24
- readonly filter?: FilterInput;
25
- readonly offset = 0;
26
- readonly limit = 0;
23
+ export declare class CountQuery extends BaseQuery {
27
24
  readonly noContent = true;
28
25
  constructor(config?: CountQueryConfig);
29
26
  buildQuery(): string;
30
- buildParams(): Record<string, unknown>;
31
27
  }
32
28
  //# sourceMappingURL=count.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"count.d.ts","sourceRoot":"","sources":["../../../src/query/search/count.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,2EAA2E;IAC3E,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACrC,SAAgB,SAAS,QAAQ;gBAErB,MAAM,GAAE,gBAAqB;IAIzC,UAAU,IAAI,MAAM;CAGvB"}
@@ -1,4 +1,4 @@
1
- import { renderFilter } from './base.js';
1
+ import { BaseQuery, renderFilter } from './base.js';
2
2
  /**
3
3
  * Counts the documents matched by a filter expression. Internally configures
4
4
  * the request as `FT.SEARCH ... LIMIT 0 0 NOCONTENT` so Redis returns only
@@ -13,19 +13,13 @@ import { renderFilter } from './base.js';
13
13
  * const total = (await index.search(new CountQuery({ filter: Tag('brand').eq('nike') }))).total;
14
14
  * ```
15
15
  */
16
- export class CountQuery {
17
- filter;
18
- offset = 0;
19
- limit = 0;
16
+ export class CountQuery extends BaseQuery {
20
17
  noContent = true;
21
18
  constructor(config = {}) {
22
- this.filter = config.filter;
19
+ super({ filter: config.filter, offset: 0, limit: 0 });
23
20
  }
24
21
  buildQuery() {
25
22
  return renderFilter(this.filter);
26
23
  }
27
- buildParams() {
28
- return {};
29
- }
30
24
  }
31
25
  //# sourceMappingURL=count.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"count.js","sourceRoot":"","sources":["../../../src/query/search/count.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAoB,MAAM,WAAW,CAAC;AAUtE;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,UAAW,SAAQ,SAAS;IACrB,SAAS,GAAG,IAAI,CAAC;IAEjC,YAAY,SAA2B,EAAE;QACrC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,UAAU;QACN,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;CACJ"}
@@ -1,4 +1,4 @@
1
- import { type BaseQuery, type FilterInput } from './base.js';
1
+ import { BaseQuery, type FilterInput } from './base.js';
2
2
  /**
3
3
  * Configuration for {@link FilterQuery}.
4
4
  */
@@ -7,7 +7,7 @@ export interface FilterQueryConfig {
7
7
  filter?: FilterInput;
8
8
  /** Fields to include in each result document. */
9
9
  returnFields?: string[];
10
- /** Number of results to return. Defaults to 10. */
10
+ /** Number of results to return. Default for `limit` (the `LIMIT` count). Defaults to 10. */
11
11
  numResults?: number;
12
12
  /** Pagination offset. */
13
13
  offset?: number;
@@ -29,14 +29,9 @@ export interface FilterQueryConfig {
29
29
  * const results = await index.search(q);
30
30
  * ```
31
31
  */
32
- export declare class FilterQuery implements BaseQuery {
33
- readonly filter?: FilterInput;
34
- readonly returnFields?: string[];
32
+ export declare class FilterQuery extends BaseQuery {
35
33
  readonly numResults: number;
36
- readonly offset?: number;
37
- readonly limit?: number;
38
34
  constructor(config?: FilterQueryConfig);
39
35
  buildQuery(): string;
40
- buildParams(): Record<string, unknown>;
41
36
  }
42
37
  //# sourceMappingURL=filter-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-query.d.ts","sourceRoot":"","sources":["../../../src/query/search/filter-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,wFAAwF;IACxF,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAY,SAAQ,SAAS;IACtC,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAEvB,MAAM,GAAE,iBAAsB;IAW1C,UAAU,IAAI,MAAM;CAGvB"}
@@ -1,4 +1,4 @@
1
- import { renderFilter } from './base.js';
1
+ import { BaseQuery, renderFilter } from './base.js';
2
2
  /**
3
3
  * Filter-only search — returns matching documents without any vector or
4
4
  * full-text scoring. Equivalent to Python `redisvl.query.FilterQuery`.
@@ -14,24 +14,20 @@ import { renderFilter } from './base.js';
14
14
  * const results = await index.search(q);
15
15
  * ```
16
16
  */
17
- export class FilterQuery {
18
- filter;
19
- returnFields;
17
+ export class FilterQuery extends BaseQuery {
20
18
  numResults;
21
- offset;
22
- limit;
23
19
  constructor(config = {}) {
24
- this.filter = config.filter;
25
- this.returnFields = config.returnFields;
26
- this.numResults = config.numResults ?? 10;
27
- this.offset = config.offset;
28
- this.limit = config.limit ?? this.numResults;
20
+ const numResults = config.numResults ?? 10;
21
+ super({
22
+ filter: config.filter,
23
+ returnFields: config.returnFields,
24
+ offset: config.offset,
25
+ limit: config.limit ?? numResults,
26
+ });
27
+ this.numResults = numResults;
29
28
  }
30
29
  buildQuery() {
31
30
  return renderFilter(this.filter);
32
31
  }
33
- buildParams() {
34
- return {};
35
- }
36
32
  }
37
33
  //# sourceMappingURL=filter-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-query.js","sourceRoot":"","sources":["../../../src/query/search/filter-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAoB,MAAM,WAAW,CAAC;AAsBtE;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,WAAY,SAAQ,SAAS;IACtB,UAAU,CAAS;IAEnC,YAAY,SAA4B,EAAE;QACtC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;QAC3C,KAAK,CAAC;YACF,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,UAAU;SACpC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAED,UAAU;QACN,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;CACJ"}
@@ -1,14 +1,10 @@
1
- import { type BaseQuery, type FilterInput } from './base.js';
2
- import { VectorDataType, VectorDistanceMetric } from '../schema/types.js';
1
+ import { BaseVectorQuery, type BaseVectorQueryConfig, type FilterInput } from './base.js';
2
+ import { VectorDataType, VectorDistanceMetric } from '../../schema/types.js';
3
3
  import type { HybridPolicy } from './vector.js';
4
4
  /**
5
5
  * Configuration for {@link VectorRangeQuery}.
6
6
  */
7
- export interface VectorRangeQueryConfig {
8
- /** Query vector. */
9
- vector: number[];
10
- /** Vector field name to search against. */
11
- vectorField: string;
7
+ export interface VectorRangeQueryConfig extends BaseVectorQueryConfig {
12
8
  /**
13
9
  * Maximum allowed vector distance for results.
14
10
  *
@@ -60,20 +56,12 @@ export interface VectorRangeQueryConfig {
60
56
  * const results = await index.search(q);
61
57
  * ```
62
58
  */
63
- export declare class VectorRangeQuery implements BaseQuery {
64
- readonly vector: number[];
65
- readonly vectorField: string;
59
+ export declare class VectorRangeQuery extends BaseVectorQuery {
66
60
  readonly distanceThreshold: number;
67
- readonly filter?: FilterInput;
68
- readonly returnFields?: string[];
69
61
  readonly distanceMetric: VectorDistanceMetric;
70
- readonly datatype: VectorDataType;
71
- readonly offset?: number;
72
- readonly limit?: number;
73
62
  readonly scoreAlias: string;
74
63
  readonly hybridPolicy?: HybridPolicy;
75
64
  readonly batchSize?: number;
76
- readonly normalizeDistance: boolean;
77
65
  constructor(config: VectorRangeQueryConfig);
78
66
  buildQuery(): string;
79
67
  buildParams(): Record<string, unknown>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../../../src/query/search/range.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,eAAe,EAEf,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EACnB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAG7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACjE;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,gFAAgF;IAChF,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,uEAAuE;IACvE,cAAc,CAAC,EAAE,oBAAoB,CAAC;IAEtC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC;IAEnC,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,yEAAyE;IACzE,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,gBAAiB,SAAQ,eAAe;IACjD,SAAgB,iBAAiB,EAAE,MAAM,CAAC;IAC1C,SAAgB,cAAc,EAAE,oBAAoB,CAAC;IACrD,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5C,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEvB,MAAM,EAAE,sBAAsB;IA8B1C,UAAU,IAAI,MAAM;IAUpB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAgBzC"}