MariaDB vector store integration.
Setup:
Install @langchain/community and mariadb.
If you wish to generate ids, you should also install the uuid package.
npm install @langchain/community mariadb uuid
import {
MariaDBStore,
DistanceStrategy,
} from "@langchain/community/vectorstores/mariadb";
// Or other embeddings
import { OpenAIEmbeddings } from "@langchain/openai";
import { PoolConfig } from "mariadb";
const embeddings = new OpenAIEmbeddings({
model: "text-embedding-3-small",
});
// Sample config
const config = {
connectionOptions: {
host: "127.0.0.1",
port: 3306,
user: "myuser",
password: "ChangeMe",
database: "api",
} as PoolConfig,
tableName: "testlangchainjs",
columns: {
idColumnName: "id",
vectorColumnName: "vector",
contentColumnName: "content",
metadataColumnName: "metadata",
},
// supported distance strategies: COSINE (default) or EUCLIDEAN
distanceStrategy: "COSINE" as DistanceStrategy,
};
const vectorStore = await MariaDBStore.initialize(embeddings, config);
import type { Document } from '@langchain/core/documents';
const document1 = { pageContent: "foo", metadata: { baz: "bar" } };
const document2 = { pageContent: "thud", metadata: { bar: "baz" } };
const document3 = { pageContent: "i will be deleted :(", metadata: {} };
const documents: Document[] = [document1, document2, document3];
const ids = ["1", "2", "3"];
await vectorStore.addDocuments(documents, { ids });
await vectorStore.delete({ ids: ["3"] });
const results = await vectorStore.similaritySearch("thud", 1);
for (const doc of results) {
console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
}
// Output: * thud [{"baz":"bar"}]
const resultsWithFilter = await vectorStore.similaritySearch("thud", 1, {"country": "BG"});
for (const doc of resultsWithFilter) {
console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
}
// Output: * foo [{"baz":"bar"}]
const resultsWithScore = await vectorStore.similaritySearchWithScore("qux", 1);
for (const [doc, score] of resultsWithScore) {
console.log(`* [SIM=${score.toFixed(6)}] ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
}
// Output: * [SIM=0.000000] qux [{"bar":"baz","baz":"bar"}]
const retriever = vectorStore.asRetriever({
searchType: "mmr", // Leave blank for standard similarity search
k: 1,
});
const resultAsRetriever = await retriever.invoke("thud");
console.log(resultAsRetriever);
// Output: [Document({ metadata: { "baz":"bar" }, pageContent: "thud" })]
Embeddings interface for generating vector embeddings from text queries, enabling vector-based similarity searches.
Defines the filter type used in search and delete operations. Can be an object for structured conditions or a string for simpler filtering.
Returns a string representing the type of vector store, which subclasses must implement to identify their specific vector storage type.
Method to add documents to the vector store. It converts the documents into vectors, and adds them to the store.
Method to add vectors to the vector store. It converts the vectors into rows and inserts them into the database.
Creates a VectorStoreRetriever instance with flexible configuration options.
Method to delete documents from the vector store. It deletes the documents that match the provided ids
Close the pool.
Method to ensure the existence of the collection table in the database. It creates the table if it does not already exist.
Method to ensure the existence of the table in the database. It creates the table if it does not already exist.
Return documents selected using the maximal marginal relevance. Maximal marginal relevance optimizes for similarity to the query AND diversity among selected documents.
Searches for documents similar to a text query by embedding the query and performing a similarity search on the resulting vector.
Method to perform a similarity search in the vector store. It returns
the k most similar documents to the query vector, along with their
similarity scores.
Searches for documents similar to a text query by embedding the query, and returns results with similarity scores.
Static method to create a new MariaDBStore instance from an
array of Document instances. It adds the documents to the store.
Static method to create a new MariaDBStore instance from an
array of texts and their metadata. It converts the texts into
Document instances and adds them to the store.
Static method to create a new MariaDBStore instance from a
connection. It creates a table if one does not exist, and calls
connect to return a new instance of MariaDBStore.
The name of the serializable. Override to provide an alias or to preserve the serialized module name in minified environments.
Implemented as a static method to support loading logic.