Class OpenSearchVectorStore
java.lang.Object
org.springframework.ai.vectorstore.observation.AbstractObservationVectorStore
org.springframework.ai.vectorstore.opensearch.OpenSearchVectorStore
- All Implemented Interfaces:
Consumer<List<Document>>,DocumentWriter,VectorStore,VectorStoreRetriever,org.springframework.beans.factory.InitializingBean
public class OpenSearchVectorStore
extends AbstractObservationVectorStore
implements org.springframework.beans.factory.InitializingBean
OpenSearch-based vector store implementation using OpenSearch's vector search
capabilities.
The store uses OpenSearch's k-NN functionality to persist and query vector embeddings along with their associated document content and metadata. The implementation supports various similarity functions and provides efficient vector search operations.
Features:
- Automatic schema initialization with configurable index creation
- Support for multiple similarity functions: Cosine, L1, L2, and Linf
- Metadata filtering using OpenSearch query expressions
- Configurable similarity thresholds for search results
- Batch processing support with configurable strategies
- Observation and metrics support through Micrometer
Basic usage example:
OpenSearchVectorStore vectorStore = OpenSearchVectorStore.builder(openSearchClient, embeddingModel)
.initializeSchema(true)
.build();
// Add documents
vectorStore.add(List.of(
new Document("content1", Map.of("key1", "value1")),
new Document("content2", Map.of("key2", "value2"))
));
// Search with filters
List<Document> results = vectorStore.similaritySearch(
SearchRequest.query("search text")
.withTopK(5)
.withSimilarityThreshold(0.7)
.withFilterExpression("key1 == 'value1'")
);
AWS OpenSearch Serverless usage example:
OpenSearchVectorStore vectorStore = OpenSearchVectorStore.builder(openSearchClient, embeddingModel)
.initializeSchema(true)
.manageDocumentIds(false) // Required for AWS OpenSearch Serverless
.build();
Advanced configuration example:
OpenSearchVectorStore vectorStore = OpenSearchVectorStore.builder(openSearchClient, embeddingModel)
.index("custom-index")
.mappingJson(customMapping)
.similarityFunction("l2")
.initializeSchema(true)
.batchingStrategy(new TokenCountBatchingStrategy())
.filterExpressionConverter(new CustomFilterExpressionConverter())
.build();
Similarity Functions:
- cosinesimil: Default, suitable for most use cases. Measures cosine similarity between vectors.
- l1: Manhattan distance between vectors.
- l2: Euclidean distance between vectors.
- linf: Chebyshev distance between vectors.
For more information about available similarity functions, see: OpenSearch KNN Spaces
- Since:
- 1.0.0
- Author:
- Jemin Huh, Soby Chacko, Christian Tzolov, Thomas Vitale, inpink, Sanghun Lee
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classBuilder class for creating OpenSearchVectorStore instances.static final recordThe representation ofDocumentalong with its embedding. -
Field Summary
FieldsFields inherited from class org.springframework.ai.vectorstore.observation.AbstractObservationVectorStore
batchingStrategy, embeddingModel -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedCreates a new OpenSearchVectorStore using the builder pattern. -
Method Summary
Modifier and TypeMethodDescriptionvoidbuilder(org.opensearch.client.opensearch.OpenSearchClient openSearchClient, EmbeddingModel embeddingModel) Creates a new builder instance for configuring an OpenSearchVectorStore.createObservationContextBuilder(String operationName) Create a newVectorStoreObservationContext.Builderinstance.voidPerform the actual add operation.voidPerform the actual delete operation.protected voiddoDelete(Filter.Expression filterExpression) Template method for concrete implementations to provide filter-based deletion logic.doSimilaritySearch(SearchRequest searchRequest) Perform the actual similarity search operation.boolean<T> Optional<T> Returns the native client if available in this vector store implementation.similaritySearch(float[] embedding, int topK, double similarityThreshold, Filter.Expression filterExpression) withSimilarityFunction(String similarityFunction) Methods inherited from class org.springframework.ai.vectorstore.observation.AbstractObservationVectorStore
add, delete, delete, similaritySearchMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.ai.document.DocumentWriter
writeMethods inherited from interface org.springframework.ai.vectorstore.VectorStore
accept, delete, getNameMethods inherited from interface org.springframework.ai.vectorstore.VectorStoreRetriever
similaritySearch
-
Field Details
-
COSINE_SIMILARITY_FUNCTION
- See Also:
-
DEFAULT_INDEX_NAME
- See Also:
-
DEFAULT_MAPPING_EMBEDDING_TYPE_KNN_VECTOR_DIMENSION
- See Also:
-
-
Constructor Details
-
OpenSearchVectorStore
Creates a new OpenSearchVectorStore using the builder pattern.- Parameters:
builder- The configured builder instance
-
-
Method Details
-
builder
public static OpenSearchVectorStore.Builder builder(org.opensearch.client.opensearch.OpenSearchClient openSearchClient, EmbeddingModel embeddingModel) Creates a new builder instance for configuring an OpenSearchVectorStore.- Returns:
- A new OpenSearchBuilder instance
-
withSimilarityFunction
-
doAdd
Description copied from class:AbstractObservationVectorStorePerform the actual add operation.- Specified by:
doAddin classAbstractObservationVectorStore- Parameters:
documents- the documents to add
-
doDelete
Description copied from class:AbstractObservationVectorStorePerform the actual delete operation.- Specified by:
doDeletein classAbstractObservationVectorStore- Parameters:
idList- the list of document IDs to delete
-
doDelete
Description copied from class:AbstractObservationVectorStoreTemplate method for concrete implementations to provide filter-based deletion logic.- Overrides:
doDeletein classAbstractObservationVectorStore- Parameters:
filterExpression- Filter expression to identify documents to delete
-
doSimilaritySearch
Description copied from class:AbstractObservationVectorStorePerform the actual similarity search operation.- Specified by:
doSimilaritySearchin classAbstractObservationVectorStore- Parameters:
searchRequest- the search request- Returns:
- the list of documents that match the query request conditions
-
similaritySearch
public List<Document> similaritySearch(float[] embedding, int topK, double similarityThreshold, Filter.Expression filterExpression) -
exists
-
afterPropertiesSet
public void afterPropertiesSet()- Specified by:
afterPropertiesSetin interfaceorg.springframework.beans.factory.InitializingBean
-
createObservationContextBuilder
Description copied from class:AbstractObservationVectorStoreCreate a newVectorStoreObservationContext.Builderinstance.- Specified by:
createObservationContextBuilderin classAbstractObservationVectorStore- Parameters:
operationName- the operation name- Returns:
- the observation context builder
-
getNativeClient
Description copied from interface:VectorStoreReturns the native client if available in this vector store implementation. Note on usage: 1. Returns empty Optional when no native client is available 2. Due to Java type erasure, runtime type checking is not possible Example usage: When working with implementation with known native client: Optionalclient = vectorStore.getNativeClient(); Note: Using Optionalinvalid input: '<'?> will return the native client if one exists, rather than an empty Optional. For type safety, prefer using the specific client type. - Specified by:
getNativeClientin interfaceVectorStore- Type Parameters:
T- The type of the native client- Returns:
- Optional containing native client if available, empty Optional otherwise
-