Skip to content

Commit 36faca1

Browse files
authored
Merge pull request #475 from M4xymm/RDBC-899
RDBC-899 - Added Vector Search to Client API, updated client version to 7.0
2 parents a55141c + 6abaeb6 commit 36faca1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+3919
-2567
lines changed

package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ravendb",
3-
"version": "6.0.0",
3+
"version": "7.0.0",
44
"description": "RavenDB client for Node.js",
55
"files": [
66
"dist"

src/Documents/Indexes/AbstractCsharpIndexCreationTask.ts

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { DocumentConventions } from "../Conventions/DocumentConventions.js";
22
import { IndexDefinition, IndexDefinitionBuilder } from "./IndexDefinition.js";
33
import { AbstractGenericIndexCreationTask } from "./AbstractGenericIndexCreationTask.js";
44
import { INDEXES } from "../../Constants.js";
5+
import { ObjectUtil } from "../../Utility/ObjectUtil.js";
56

67
/**
78
* Base class for creating indexes using C# code in string.
@@ -39,6 +40,7 @@ export abstract class AbstractCsharpIndexCreationTask extends AbstractGenericInd
3940
indexDefinitionBuilder.suggestionsOptions = this.indexSuggestions;
4041
indexDefinitionBuilder.termVectorsStrings = this.termVectorsStrings;
4142
indexDefinitionBuilder.spatialIndexesStrings = this.spatialOptionsStrings;
43+
indexDefinitionBuilder.vectorFieldStrings = this.vectorOptionsStrings
4244
indexDefinitionBuilder.outputReduceToCollection = this.outputReduceToCollection;
4345
indexDefinitionBuilder.patternForOutputReduceToCollectionReferences = this.patternForOutputReduceToCollectionReferences;
4446
indexDefinitionBuilder.patternReferencesCollectionName = this.patternReferencesCollectionName;
@@ -54,6 +56,8 @@ export abstract class AbstractCsharpIndexCreationTask extends AbstractGenericInd
5456

5557
if (this.searchEngineType && this.searchEngineType !== "None") {
5658
indexDefinitionBuilder.configuration[INDEXES.INDEXING_STATIC_SEARCH_ENGINE_TYPE] = this.searchEngineType;
59+
} else if (!ObjectUtil.isEmpty(this.vectorOptionsStrings)) {
60+
indexDefinitionBuilder.configuration[INDEXES.INDEXING_STATIC_SEARCH_ENGINE_TYPE] = "Corax";
5761
}
5862

5963
return indexDefinitionBuilder.toIndexDefinition(this.conventions);

src/Documents/Indexes/AbstractCsharpMultiMapIndexCreationTask.ts

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { IndexDefinition, IndexDefinitionBuilder } from "./IndexDefinition.js";
33
import { DocumentConventions } from "../Conventions/DocumentConventions.js";
44
import { AbstractGenericIndexCreationTask } from "./AbstractGenericIndexCreationTask.js";
55
import { INDEXES } from "../../Constants.js";
6+
import { ObjectUtil } from "../../Utility/ObjectUtil.js";
67

78
export class AbstractCsharpMultiMapIndexCreationTask extends AbstractGenericIndexCreationTask {
89

@@ -49,9 +50,12 @@ export class AbstractCsharpMultiMapIndexCreationTask extends AbstractGenericInde
4950
indexDefinitionBuilder.priority = this.priority;
5051
indexDefinitionBuilder.state = this.state;
5152
indexDefinitionBuilder.deploymentMode = this.deploymentMode;
53+
indexDefinitionBuilder.vectorFieldStrings = this.vectorOptionsStrings;
5254

5355
if (this.searchEngineType) {
5456
indexDefinitionBuilder.configuration[INDEXES.INDEXING_STATIC_SEARCH_ENGINE_TYPE] = this.searchEngineType;
57+
} else if (!ObjectUtil.isEmpty(this.vectorOptionsStrings)) {
58+
indexDefinitionBuilder.configuration[INDEXES.INDEXING_STATIC_SEARCH_ENGINE_TYPE] = "Corax";
5559
}
5660

5761
const indexDefinition = indexDefinitionBuilder.toIndexDefinition(this.conventions, false);

src/Documents/Indexes/AbstractGenericIndexCreationTask.ts

+7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { CONSTANTS } from "../../Constants.js";
55
import { IndexDefinition } from "./IndexDefinition.js";
66
import { AdditionalAssembly } from "./AdditionalAssembly.js";
77
import { throwError } from "../../Exceptions/index.js";
8+
import { FieldVectorOptions } from "../Queries/VectorSearch/VectorSearchOptions.js";
89

910
type FieldOrAllFields<TField> = TField | "__all_fields";
1011

@@ -19,6 +20,7 @@ export abstract class AbstractGenericIndexCreationTask<TField extends string = s
1920
protected indexSuggestions: Set<FieldOrAllFields<TField>>;
2021
protected termVectorsStrings: Record<FieldOrAllFields<TField>, FieldTermVector>;
2122
protected spatialOptionsStrings: Record<FieldOrAllFields<TField>, SpatialOptions>;
23+
protected vectorOptionsStrings: Record<FieldOrAllFields<TField>, FieldVectorOptions>;
2224

2325
protected outputReduceToCollection: string;
2426
protected patternForOutputReduceToCollectionReferences: string;
@@ -33,6 +35,7 @@ export abstract class AbstractGenericIndexCreationTask<TField extends string = s
3335
this.indexSuggestions = new Set<FieldOrAllFields<TField>>();
3436
this.termVectorsStrings = {} as Record<FieldOrAllFields<TField>, FieldTermVector>;
3537
this.spatialOptionsStrings = {} as Record<FieldOrAllFields<TField>, SpatialOptions>;
38+
this.vectorOptionsStrings = {} as Record<FieldOrAllFields<TField>, FieldVectorOptions>;
3639
}
3740

3841
abstract get isMapReduce(): boolean;
@@ -93,4 +96,8 @@ export abstract class AbstractGenericIndexCreationTask<TField extends string = s
9396

9497
this.additionalAssemblies.push(assembly);
9598
}
99+
100+
protected vectorField(field: FieldOrAllFields<TField>, vector: FieldVectorOptions): void {
101+
this.vectorOptionsStrings[field] = vector;
102+
}
96103
}

src/Documents/Indexes/AbstractIndexDefinitionBuilder.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { DocumentConventions } from "../Conventions/DocumentConventions.js";
66
import { IndexFieldOptions } from "./IndexFieldOptions.js";
77
import { IndexDeploymentMode } from "./IndexDeploymentMode.js";
88
import { AdditionalAssembly } from "./AdditionalAssembly.js";
9+
import { FieldVectorOptions } from "../Queries/VectorSearch/VectorSearchOptions.js";
910

1011
export abstract class AbstractIndexDefinitionBuilder<TIndexDefinition extends IndexDefinition> {
1112
protected readonly _indexName: string;
@@ -18,7 +19,7 @@ export abstract class AbstractIndexDefinitionBuilder<TIndexDefinition extends In
1819
public suggestionsOptions: Set<string>;
1920
public termVectorsStrings: { [key: string]: FieldTermVector };
2021
public spatialIndexesStrings: { [key: string]: SpatialOptions };
21-
22+
public vectorFieldStrings: { [key: string]: FieldVectorOptions };
2223
public lockMode: IndexLockMode;
2324
public priority: IndexPriority;
2425
public state: IndexState;
@@ -45,6 +46,8 @@ export abstract class AbstractIndexDefinitionBuilder<TIndexDefinition extends In
4546
this.analyzersStrings = {};
4647
this.termVectorsStrings = {};
4748
this.spatialIndexesStrings = {};
49+
this.vectorFieldStrings = {};
50+
4851
this.configuration = {};
4952
}
5053

@@ -78,6 +81,8 @@ export abstract class AbstractIndexDefinitionBuilder<TIndexDefinition extends In
7881
(options, value) => options.spatial = value);
7982
this._applyValues(indexDefinition, suggestions,
8083
(options, value) => options.suggestions = value);
84+
this._applyValues(indexDefinition, this.vectorFieldStrings,
85+
(options, value) => options.vector = value);
8186

8287
indexDefinition.additionalSources = this.additionalSources;
8388
indexDefinition.additionalAssemblies = this.additionalAssemblies;

src/Documents/Indexes/AbstractJavaScriptIndexCreationTask.ts

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { DocumentConventions } from "../Conventions/DocumentConventions.js";
1313
import { StringBuilder } from "../../Utility/StringBuilder.js";
1414
import { BaseJavaScriptIndexCreationTask } from "./BaseJavaScriptIndexCreationTask.js";
1515
import { INDEXES } from "../../Constants.js";
16+
import { ObjectUtil } from "../../Utility/ObjectUtil.js";
1617

1718
export class AbstractJavaScriptIndexCreationTask<TDocument extends object, TMapResult extends object = any>
1819
extends BaseJavaScriptIndexCreationTask<keyof TMapResult & string> {
@@ -100,6 +101,7 @@ export class AbstractJavaScriptIndexCreationTask<TDocument extends object, TMapR
100101
indexDefinitionBuilder.suggestionsOptions = this.indexSuggestions;
101102
indexDefinitionBuilder.termVectorsStrings = this.termVectorsStrings;
102103
indexDefinitionBuilder.spatialIndexesStrings = this.spatialOptionsStrings;
104+
indexDefinitionBuilder.vectorFieldStrings = this.vectorOptionsStrings;
103105
indexDefinitionBuilder.outputReduceToCollection = this.outputReduceToCollection;
104106
indexDefinitionBuilder.patternForOutputReduceToCollectionReferences = this.patternForOutputReduceToCollectionReferences;
105107
indexDefinitionBuilder.patternReferencesCollectionName = this.patternReferencesCollectionName;
@@ -114,6 +116,8 @@ export class AbstractJavaScriptIndexCreationTask<TDocument extends object, TMapR
114116

115117
if (this.searchEngineType) {
116118
indexDefinitionBuilder.configuration[INDEXES.INDEXING_STATIC_SEARCH_ENGINE_TYPE] = this.searchEngineType;
119+
} else if (!ObjectUtil.isEmpty(this.vectorOptionsStrings)) {
120+
indexDefinitionBuilder.configuration[INDEXES.INDEXING_STATIC_SEARCH_ENGINE_TYPE] = "Corax";
117121
}
118122

119123

src/Documents/Indexes/AbstractJavaScriptMultiMapIndexCreationTask.ts

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { DocumentConventions } from "../Conventions/DocumentConventions.js";
1313
import { StringBuilder } from "../../Utility/StringBuilder.js";
1414
import { BaseJavaScriptIndexCreationTask } from "./BaseJavaScriptIndexCreationTask.js";
1515
import { INDEXES } from "../../Constants.js";
16+
import { ObjectUtil } from "../../Utility/ObjectUtil.js";
1617

1718
export class AbstractJavaScriptMultiMapIndexCreationTask<TMapResult extends object = any>
1819
extends BaseJavaScriptIndexCreationTask<keyof TMapResult & string> {
@@ -85,6 +86,7 @@ export class AbstractJavaScriptMultiMapIndexCreationTask<TMapResult extends obje
8586
indexDefinitionBuilder.storesStrings = this.storesStrings;
8687
indexDefinitionBuilder.suggestionsOptions = this.indexSuggestions;
8788
indexDefinitionBuilder.termVectorsStrings = this.termVectorsStrings;
89+
indexDefinitionBuilder.vectorFieldStrings = this.vectorOptionsStrings;
8890
indexDefinitionBuilder.spatialIndexesStrings = this.spatialOptionsStrings;
8991
indexDefinitionBuilder.outputReduceToCollection = this.outputReduceToCollection;
9092
indexDefinitionBuilder.patternForOutputReduceToCollectionReferences = this.patternForOutputReduceToCollectionReferences;
@@ -99,6 +101,8 @@ export class AbstractJavaScriptMultiMapIndexCreationTask<TMapResult extends obje
99101

100102
if (this.searchEngineType) {
101103
indexDefinitionBuilder.configuration[INDEXES.INDEXING_STATIC_SEARCH_ENGINE_TYPE] = this.searchEngineType;
104+
} else if (!ObjectUtil.isEmpty(this.vectorOptionsStrings)) {
105+
indexDefinitionBuilder.configuration[INDEXES.INDEXING_STATIC_SEARCH_ENGINE_TYPE] = "Corax";
102106
}
103107

104108
const indexDefinition = indexDefinitionBuilder.toIndexDefinition(this.conventions, false);

src/Documents/Indexes/AbstractRawJavaScriptIndexCreationTask.ts

+2
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ export class AbstractRawJavaScriptIndexCreationTask extends AbstractIndexCreatio
106106

107107
if (this.searchEngineType && this.searchEngineType !== "None") {
108108
this._definition.configuration[INDEXES.INDEXING_STATIC_SEARCH_ENGINE_TYPE] = this.searchEngineType;
109+
} else if (this._definition.fields && Object.values(this._definition.fields).some(fieldOptions => fieldOptions.vector)) {
110+
this._definition.configuration[INDEXES.INDEXING_STATIC_SEARCH_ENGINE_TYPE] = "Corax";
109111
}
110112

111113
return this._definition;

src/Documents/Indexes/AutoIndexFieldOptions.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { AggregationOperation, AutoFieldIndexing, FieldStorage, GroupByArrayBehavior } from "./Enums.js";
22
import { AutoSpatialOptions } from "./Spatial/AutoSpatialOptions.js";
3+
import { AutoVectorOptions } from "../Queries/VectorSearch/VectorSearchOptions.js";
34

45
export interface AutoIndexFieldOptions {
56
storage: FieldStorage;
@@ -9,4 +10,5 @@ export interface AutoIndexFieldOptions {
910
groupByArrayBehavior: GroupByArrayBehavior;
1011
suggestions: boolean;
1112
isNameQuoted: boolean;
13+
vector: AutoVectorOptions;
1214
}

src/Documents/Indexes/Counters/AbstractCsharpCountersIndexCreationTask.ts

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export abstract class AbstractCsharpCountersIndexCreationTask extends AbstractGe
1919
indexDefinitionBuilder.storesStrings = this._storesStrings;
2020
indexDefinitionBuilder.suggestionsOptions = this._indexSuggestions;
2121
indexDefinitionBuilder.termVectorsStrings = this._termVectorsStrings;
22+
indexDefinitionBuilder.vectorFieldStrings = this._vectorOptionsStrings;
2223
indexDefinitionBuilder.spatialIndexesStrings = this._spatialOptionsStrings;
2324
indexDefinitionBuilder.outputReduceToCollection = this._outputReduceToCollection;
2425
indexDefinitionBuilder.patternForOutputReduceToCollectionReferences = this._patternForOutputReduceToCollectionReferences;

src/Documents/Indexes/Counters/AbstractGenericCountersIndexCreationTask.ts

+7
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { FieldIndexing, FieldStorage, FieldTermVector } from "../Enums.js";
33
import { SpatialOptions, SpatialOptionsFactory } from "../Spatial.js";
44
import { CONSTANTS } from "../../../Constants.js";
55
import { CountersIndexDefinition } from "./CountersIndexDefinition.js";
6+
import { FieldVectorOptions } from "../../Queries/VectorSearch/VectorSearchOptions.js";
67

78
export abstract class AbstractGenericCountersIndexCreationTask extends AbstractIndexCreationTaskBase<CountersIndexDefinition> {
89
protected _reduce: string;
@@ -13,6 +14,7 @@ export abstract class AbstractGenericCountersIndexCreationTask extends AbstractI
1314
protected _indexSuggestions: Set<string>;
1415
protected _termVectorsStrings: Record<string, FieldTermVector>;
1516
protected _spatialOptionsStrings: Record<string, SpatialOptions>;
17+
protected _vectorOptionsStrings: Record<string, FieldVectorOptions>;
1618

1719
protected _outputReduceToCollection: string;
1820
protected _patternForOutputReduceToCollectionReferences: string;
@@ -27,6 +29,7 @@ export abstract class AbstractGenericCountersIndexCreationTask extends AbstractI
2729
this._indexSuggestions = new Set<string>();
2830
this._termVectorsStrings = {};
2931
this._spatialOptionsStrings = {};
32+
this._vectorOptionsStrings = {};
3033
}
3134

3235
/**
@@ -82,4 +85,8 @@ export abstract class AbstractGenericCountersIndexCreationTask extends AbstractI
8285
protected suggestion(field: string): void {
8386
this._indexSuggestions.add(field);
8487
}
88+
89+
protected vectorField(field: string, vector: FieldVectorOptions): void {
90+
this._vectorOptionsStrings[field] = vector;
91+
}
8592
}

src/Documents/Indexes/Counters/AbstractMultiMapCountersIndexCreationTask.ts

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export abstract class AbstractMultiMapCountersIndexCreationTask extends Abstract
2929
indexDefinitionBuilder.suggestionsOptions = this._indexSuggestions;
3030
indexDefinitionBuilder.termVectorsStrings = this._termVectorsStrings;
3131
indexDefinitionBuilder.spatialIndexesStrings = this._spatialOptionsStrings;
32+
indexDefinitionBuilder.vectorFieldStrings = this._vectorOptionsStrings;
3233
indexDefinitionBuilder.outputReduceToCollection = this._outputReduceToCollection;
3334
indexDefinitionBuilder.patternForOutputReduceToCollectionReferences = this._patternForOutputReduceToCollectionReferences;
3435
indexDefinitionBuilder.patternReferencesCollectionName = this._patternReferencesCollectionName;
+9-7
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { SpatialOptions } from "./Spatial.js";
2-
import { FieldStorage, FieldIndexing, FieldTermVector } from "./Enums.js";
2+
import { FieldIndexing, FieldStorage, FieldTermVector } from "./Enums.js";
3+
import { FieldVectorOptions } from "../Queries/VectorSearch/VectorSearchOptions.js";
34

45
export class IndexFieldOptions {
5-
public storage: FieldStorage;
6-
public indexing: FieldIndexing;
7-
public termVector: FieldTermVector;
8-
public spatial: SpatialOptions;
9-
public analyzer: string;
10-
public suggestions: boolean;
6+
public storage?: FieldStorage;
7+
public indexing?: FieldIndexing;
8+
public termVector?: FieldTermVector;
9+
public spatial?: SpatialOptions;
10+
public analyzer?: string;
11+
public suggestions?: boolean;
12+
public vector?: FieldVectorOptions;
1113
}

src/Documents/Indexes/StronglyTyped.ts

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { FieldIndexing, FieldStorage, FieldTermVector } from "./Enums.js";
22
import { MetadataObject } from "../Session/MetadataObject.js";
33
import { AttachmentName, IAttachmentObject } from "../Attachments/index.js";
44
import { CapitalizeType } from "../../Types/index.js";
5+
import { FieldVectorOptions } from "../Queries/VectorSearch/VectorSearchOptions.js";
56

67
export type IndexingMapDefinition<TInput, TOutput> = (document: TInput) => TOutput | TOutput[];
78

@@ -13,6 +14,7 @@ export interface CreateFieldOptions {
1314
storage?: boolean;
1415
indexing?: FieldIndexing;
1516
termVector?: FieldTermVector;
17+
vector?: FieldVectorOptions;
1618
}
1719

1820
export interface IndexingMapUtils {

src/Documents/Indexes/TimeSeries/AbstractCsharpTimeSeriesIndexCreationTask.ts

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export abstract class AbstractCsharpTimeSeriesIndexCreationTask extends Abstract
2020
indexDefinitionBuilder.suggestionsOptions = this._indexSuggestions;
2121
indexDefinitionBuilder.termVectorsStrings = this._termVectorsStrings;
2222
indexDefinitionBuilder.spatialIndexesStrings = this._spatialOptionsStrings;
23+
indexDefinitionBuilder.vectorFieldStrings = this._vectorOptionsStrings;
2324
indexDefinitionBuilder.outputReduceToCollection = this._outputReduceToCollection;
2425
indexDefinitionBuilder.patternForOutputReduceToCollectionReferences = this._patternForOutputReduceToCollectionReferences;
2526
indexDefinitionBuilder.patternReferencesCollectionName = this._patternReferencesCollectionName;

src/Documents/Indexes/TimeSeries/AbstractGenericTimeSeriesIndexCreationTask.ts

+7
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { AbstractIndexCreationTaskBase } from "../AbstractIndexCreationTaskBase.
33
import { FieldIndexing, FieldStorage, FieldTermVector } from "../Enums.js";
44
import { SpatialOptions, SpatialOptionsFactory } from "../Spatial.js";
55
import { CONSTANTS } from "../../../Constants.js";
6+
import { FieldVectorOptions } from "../../Queries/VectorSearch/VectorSearchOptions.js";
67

78
/**
89
* Abstract class used to provide infrastructure service for actual creation tasks
@@ -16,6 +17,7 @@ export abstract class AbstractGenericTimeSeriesIndexCreationTask extends Abstrac
1617
protected _indexSuggestions: Set<string>;
1718
protected _termVectorsStrings: Record<string, FieldTermVector>;
1819
protected _spatialOptionsStrings: Record<string, SpatialOptions>;
20+
protected _vectorOptionsStrings: Record<string, FieldVectorOptions>;
1921

2022
protected _outputReduceToCollection: string;
2123
protected _patternForOutputReduceToCollectionReferences: string;
@@ -30,6 +32,7 @@ export abstract class AbstractGenericTimeSeriesIndexCreationTask extends Abstrac
3032
this._indexSuggestions = new Set<string>();
3133
this._termVectorsStrings = {};
3234
this._spatialOptionsStrings = {};
35+
this._vectorOptionsStrings = {};
3336
}
3437

3538
/**
@@ -83,4 +86,8 @@ export abstract class AbstractGenericTimeSeriesIndexCreationTask extends Abstrac
8386
protected suggestion(field: string): void {
8487
this._indexSuggestions.add(field);
8588
}
89+
90+
protected vectorField(field: string, vector: FieldVectorOptions): void {
91+
this._vectorOptionsStrings[field] = vector;
92+
}
8693
}

src/Documents/Indexes/TimeSeries/AbstractMultiMapTimeSeriesIndexCreationTask.ts

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export abstract class AbstractMultiMapTimeSeriesIndexCreationTask extends Abstra
2929
indexDefinitionBuilder.suggestionsOptions = this._indexSuggestions;
3030
indexDefinitionBuilder.termVectorsStrings = this._termVectorsStrings;
3131
indexDefinitionBuilder.spatialIndexesStrings = this._spatialOptionsStrings;
32+
indexDefinitionBuilder.vectorFieldStrings = this._vectorOptionsStrings;
3233
indexDefinitionBuilder.outputReduceToCollection = this._outputReduceToCollection;
3334
indexDefinitionBuilder.patternForOutputReduceToCollectionReferences = this._patternForOutputReduceToCollectionReferences;
3435
indexDefinitionBuilder.patternReferencesCollectionName = this._patternReferencesCollectionName;

0 commit comments

Comments
 (0)