Skip to content

AzureAISearchVectorStore

Defined in: packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:282

Azure AI Search vector store.

import { DefaultAzureCredential, getBearerTokenProvider} from "@azure/identity";
import {KnownAnalyzerNames, KnownVectorSearchAlgorithmKind } from "@azure/search-documents";
// 1- Setup Azure OpenAI
const azureADTokenProvider = getBearerTokenProvider(
new DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default",
);
// IMPORTANT: You need to deploy your own embedding model as well as your own chat completion model
// NOTE: You can use whatever embedding model and language model that is supported by vectorstores
const azure = {
azureADTokenProvider,
deployment: process.env.AZURE_DEPLOYMENT_NAME,
};
Settings.llm = new OpenAI({ azure });
Settings.embedModel = new OpenAIEmbedding({
model: process.env.EMBEDDING_MODEL,
azure: {
...azure,
deployment: process.env.EMBEDDING_MODEL,
},
});
// ---------------------------------------------------------
// 2- Setup Azure AI Search
// Define env variables in .env file
// AZURE_AI_SEARCH_ENDPOINT=
// AZURE_AI_SEARCH_KEY=
// AZURE_OPENAI_ENDPOINT=
// EMBEDDING_MODEL=text-embedding-ada-002
// AZURE_DEPLOYMENT_NAME=gpt-4
// AZURE_API_VERSION=2024-09-01-preview
// Define index name
const indexName = "vectorstores-vector-store";
// ---------------------------------------------------------
// 3a- Create Index (if it does not exist)
// id: Edm.String
// chunk: Edm.String
// embedding: Collection(Edm.Single)
// metadata: Edm.String
// doc_id: Edm.String
// author: Edm.String
// theme: Edm.String
// director: Edm.String
// Define metadata fields with their respective configurations
const metadataFields = {
author: "author",
theme: ["theme", MetadataIndexFieldType.STRING],
director: "director",
};
// Define index parameters and vector store configuration
// Index validation:
// - IndexManagement.VALIDATE_INDEX: will validate before creating emnbedding index and will throw a runtime error if the index does not exist
// - IndexManagement.NO_VALIDATION: will try to access the index and will throw a runtime error if the index does not exist
// - IndexManagement.CREATE_IF_NOT_EXISTS: will create the index if it does not exist
const vectorStore = new AzureAISearchVectorStore({
filterableMetadataFieldKeys:
metadataFields as unknown as FilterableMetadataFieldKeysType,
indexName,
indexManagement: IndexManagement.CREATE_IF_NOT_EXISTS,
idFieldKey: "id",
chunkFieldKey: "chunk",
embeddingFieldKey: "embedding",
metadataStringFieldKey: "metadata",
docIdFieldKey: "doc_id",
embeddingDimensionality: 1536,
hiddenFieldKeys: ["embedding"],
languageAnalyzer: KnownAnalyzerNames.EnLucene,
// store vectors on disk
vectorAlgorithmType: KnownVectorSearchAlgorithmKind.ExhaustiveKnn,
// Optional: Set to "scalar" or "binary" if using HNSW
compressionType: KnownVectorSearchCompressionKind.BinaryQuantization,
});
// ---------------------------------------------------------
// 3a- Loading documents
// Load the documents stored in the data/paul_graham/ using the SimpleDirectoryReader
// NOTE: You can use whatever reader that is supported by vectorstores
// Load documents using a directory reader
const documents = await new SimpleDirectoryReader().loadData(
"data/paul_graham/",
);
// Create index from documents with the specified vector store
const index = await VectorStoreIndex.fromDocuments(documents, {
vectorStore,
docStoreStrategy: DocStoreStrategy.UPSERTS,
});
const queryEngine = index.asQueryEngine();
const response = await queryEngine.query({
query: "What did the author do growing up?",
similarityTopK: 3,
} as any);
console.log({ response });
## Extends
- [`BaseVectorStore`](basevectorstore.md)
## Type Parameters
### T
`T` *extends* [`R`](../type-aliases/r.md)
## Constructors
### Constructor
> **new AzureAISearchVectorStore**\<`T`\>(`options`): `AzureAISearchVectorStore`\<`T`\>
Defined in: [packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:309](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts#L309)
#### Parameters
##### options
[`AzureAISearchOptions`](../interfaces/azureaisearchoptions.md)\<`T`\> & [`VectorStoreBaseParams`](../type-aliases/vectorstorebaseparams.md)
#### Returns
`AzureAISearchVectorStore`\<`T`\>
#### Overrides
[`BaseVectorStore`](basevectorstore.md).[`constructor`](basevectorstore.md#constructor)
## Properties
### storesText
> **storesText**: `boolean` = `true`
Defined in: [packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:283](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts#L283)
#### Overrides
[`BaseVectorStore`](basevectorstore.md).[`storesText`](basevectorstore.md#storestext)
***
### \_searchClient
> **\_searchClient**: `SearchClient`\<`T`\> \| `undefined`
Defined in: [packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:284](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts#L284)
***
### \_indexClient
> **\_indexClient**: `SearchIndexClient` \| `undefined`
Defined in: [packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:290](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts#L290)
***
### flatMetadata
> **flatMetadata**: `boolean` = `true`
Defined in: [packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:296](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts#L296)
***
### embedModel
> **embedModel**: [`BaseEmbedding`](baseembedding.md)
Defined in: [packages/core/src/vector-store/index.ts:128](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/core/src/vector-store/index.ts#L128)
#### Inherited from
[`BaseVectorStore`](basevectorstore.md).[`embedModel`](basevectorstore.md#embedmodel)
***
### isEmbeddingQuery?
> `optional` **isEmbeddingQuery**: `boolean`
Defined in: [packages/core/src/vector-store/index.ts:130](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/core/src/vector-store/index.ts#L130)
#### Inherited from
[`BaseVectorStore`](basevectorstore.md).[`isEmbeddingQuery`](basevectorstore.md#isembeddingquery)
## Methods
### createSearchIndexClient()
> **createSearchIndexClient**(`options`): `void`
Defined in: [packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:858](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts#L858)
#### Parameters
##### options
[`AzureAISearchOptions`](../interfaces/azureaisearchoptions.md)\<`T`\>
#### Returns
`void`
***
### createSearchClient()
> **createSearchClient**(`options`): `void`
Defined in: [packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:875](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts#L875)
#### Parameters
##### options
[`AzureAISearchOptions`](../interfaces/azureaisearchoptions.md)\<`T`\>
#### Returns
`void`
***
### client()
> **client**(): `SearchClient`\<`T`\> \| `undefined`
Defined in: [packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:1059](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts#L1059)
Get search client
#### Returns
`SearchClient`\<`T`\> \| `undefined`
Azure AI Search client. See SearchClient
#### Overrides
[`BaseVectorStore`](basevectorstore.md).[`client`](basevectorstore.md#client-1)
***
### indexClient()
> **indexClient**(): `SearchIndexClient` \| `undefined`
Defined in: [packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:1067](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts#L1067)
Get index client
#### Returns
`SearchIndexClient` \| `undefined`
Azure AI Search index client. See SearchIndexClient
***
### add()
> **add**(`nodes`): `Promise`\<`string`[]\>
Defined in: [packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:1076](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts#L1076)
Add nodes to index associated with the configured search client.
#### Parameters
##### nodes
[`BaseNode`](basenode.md)\<[`Metadata`](../type-aliases/metadata.md)\>[]
List of nodes with embeddings to add to the index
#### Returns
`Promise`\<`string`[]\>
List of node IDs that were added to the index
#### Overrides
[`BaseVectorStore`](basevectorstore.md).[`add`](basevectorstore.md#add)
***
### delete()
> **delete**(`refDocId`): `Promise`\<`void`\>
Defined in: [packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:1141](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts#L1141)
Delete documents from the AI Search Index with docIdFieldKey (doc_id) field equal to refDocId.
#### Parameters
##### refDocId
`string`
The reference document ID to delete from the index
#### Returns
`Promise`\<`void`\>
#### Overrides
[`BaseVectorStore`](basevectorstore.md).[`delete`](basevectorstore.md#delete)
***
### getNodes()
> **getNodes**(`nodeIds?`, `filters?`, `limit?`): `Promise`\<[`BaseNode`](basenode.md)\<[`Metadata`](../type-aliases/metadata.md)\>[]\>
Defined in: [packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:1188](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts#L1188)
Get nodes asynchronously from the Azure AI Search index.
#### Parameters
##### nodeIds?
`string`[]
List of node IDs to retrieve from the index
##### filters?
[`MetadataFilters`](../interfaces/metadatafilters.md)
Metadata filters to apply to the search
##### limit?
`number`
Maximum number of nodes to retrieve
#### Returns
`Promise`\<[`BaseNode`](basenode.md)\<[`Metadata`](../type-aliases/metadata.md)\>[]\>
List of nodes retrieved from the index
***
### query()
> **query**(`query`): `Promise`\<[`VectorStoreQueryResult`](../interfaces/vectorstorequeryresult.md)\>
Defined in: [packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:1241](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts#L1241)
#### Parameters
##### query
[`VectorStoreQuery`](../interfaces/vectorstorequery.md)\<`unknown`\> & `object`
#### Returns
`Promise`\<[`VectorStoreQueryResult`](../interfaces/vectorstorequeryresult.md)\>
#### Overrides
[`BaseVectorStore`](basevectorstore.md).[`query`](basevectorstore.md#query)
***
### exists()
> **exists**(`refDocId`): `Promise`\<`boolean`\>
Defined in: [packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts:1298](https://github.com/marcusschiesser/vectorstores/blob/ddf6b48881a800a24be35adebce6878566cf0014/packages/providers/storage/azure/src/vectorStore/AzureAISearchVectorStore.ts#L1298)
Check if any nodes exist for the given document reference ID.
Used for de-duplication during ingestion.
#### Parameters
##### refDocId
`string`
The reference document ID to check
#### Returns
`Promise`\<`boolean`\>
true if any nodes with this ref_doc_id exist
#### Overrides
[`BaseVectorStore`](basevectorstore.md).[`exists`](basevectorstore.md#exists)