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
  • Field Details

  • Constructor Details

    • OpenSearchVectorStore

      protected OpenSearchVectorStore(OpenSearchVectorStore.Builder builder)
      Creates a new OpenSearchVectorStore using the builder pattern.
      Parameters:
      builder - The configured builder instance
  • Method Details