CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-springframework-ai--spring-ai-spring-boot-autoconfigure

Spring AI Spring Boot Auto Configuration modules providing automatic setup for AI models, vector stores, MCP, and retry capabilities

Overview
Eval results
Files

vector-store-api.mddocs/reference/

Vector Store Modules

Spring AI provides autoconfiguration for 20 vector database integrations, enabling semantic search, document storage, and retrieval-augmented generation (RAG) patterns with comprehensive configuration and monitoring.

Overview

Vector store modules automatically configure VectorStore implementations for popular vector databases. All vector stores implement the common VectorStore interface for consistency and easy switching between providers.

Common Interface

/**
 * Common interface implemented by all vector stores
 * Provides document storage and similarity search capabilities
 */
interface VectorStore {
    /**
     * Add documents with embeddings to the store
     * Embeddings are automatically generated using the configured EmbeddingModel
     * 
     * @param documents List of documents to add (content + metadata)
     * @throws TransientAiException if embedding generation fails transiently
     * @throws NonTransientAiException if embedding generation fails permanently
     */
    void add(List<Document> documents);
    
    /**
     * Delete documents by ID
     * 
     * @param idList List of document IDs to delete
     */
    void delete(List<String> idList);
    
    /**
     * Find similar documents using query text
     * Automatically generates embeddings for the query
     * 
     * @param query Query text for similarity search
     * @return List of similar documents (default: top 4)
     */
    List<Document> similaritySearch(String query);
    
    /**
     * Find similar documents with detailed search options
     * 
     * @param request Search request with:
     *                - query: Query text
     *                - topK: Number of results (default: 4)
     *                - similarityThreshold: Minimum similarity (0.0-1.0)
     *                - filterExpression: Metadata filter
     * @return List of similar documents matching criteria
     */
    List<Document> similaritySearch(SearchRequest request);
}

/**
 * Document with content, metadata, and embedding
 */
class Document {
    /**
     * Unique identifier (auto-generated if not provided)
     */
    private String id;
    
    /**
     * Document content/text
     */
    private String content;
    
    /**
     * Document metadata (searchable attributes)
     * Examples: {"category": "tech", "author": "John", "date": "2024-01-01"}
     */
    private Map<String, Object> metadata;
    
    /**
     * Embedding vector (auto-generated during add operation)
     */
    private List<Double> embedding;
}

/**
 * Search request with filtering and options
 */
class SearchRequest {
    /**
     * Query text for similarity search
     */
    private String query;
    
    /**
     * Number of results to return
     * Default: 4
     * Range: 1-1000 (provider-dependent)
     */
    private int topK = 4;
    
    /**
     * Similarity threshold (0.0 to 1.0)
     * Only return results with similarity >= threshold
     * Default: 0.0 (no filtering)
     */
    private double similarityThreshold = 0.0;
    
    /**
     * Metadata filter expression
     * Examples:
     * - "category == 'tech'"
     * - "price > 100 && category == 'electronics'"
     * - "author in ['John', 'Jane']"
     */
    private Filter.Expression filterExpression;
}

Supported Vector Stores

  1. Azure AI Search - Azure Cognitive Search vector storage
  2. Azure Cosmos DB - Azure Cosmos DB with vector search
  3. Cassandra - Apache Cassandra with vector support
  4. Chroma - Chroma vector database
  5. Couchbase - Couchbase with vector search
  6. Elasticsearch - Elasticsearch vector search
  7. GemFire - VMware GemFire/Tanzu vector store
  8. MariaDB - MariaDB with vector extension
  9. Milvus - Milvus vector database
  10. MongoDB Atlas - MongoDB Atlas vector search
  11. Neo4j - Neo4j graph database with vectors
  12. OpenSearch - OpenSearch vector engine
  13. Oracle - Oracle Database with vector support
  14. PGVector - PostgreSQL with pgvector extension
  15. Pinecone - Pinecone vector database
  16. Qdrant - Qdrant vector database
  17. Redis - Redis Stack with vector search
  18. Typesense - Typesense vector search
  19. Weaviate - Weaviate vector database
  20. Vector Store Observation - Monitoring for vector operations

Common Autoconfiguration Pattern

All vector stores follow similar autoconfiguration:

/**
 * Generic vector store autoconfiguration pattern
 * 
 * @AutoConfiguration
 * @ConditionalOnClass(VectorStoreImpl.class)
 * @EnableConfigurationProperties(VectorStoreProperties.class)
 */
@AutoConfiguration
@ConditionalOnClass(VectorStoreImpl.class)
@EnableConfigurationProperties(VectorStoreProperties.class)
class VectorStoreAutoConfiguration {
    
    /**
     * Creates vector store implementation
     * 
     * @Bean
     * @ConditionalOnMissingBean
     * @param embeddingModel Embedding model for generating embeddings
     * @param properties Vector store configuration properties
     * @return VectorStore implementation
     */
    @Bean
    @ConditionalOnMissingBean
    VectorStore vectorStore(
        EmbeddingModel embeddingModel,
        VectorStoreProperties properties
    );
}

Vector Store Details

1. Azure AI Search

Maven: org.springframework.ai:spring-ai-autoconfigure-vector-store-azure:1.1.2

/**
 * Autoconfigures Azure AI Search vector store
 * 
 * @AutoConfiguration
 * @ConditionalOnClass(AzureVectorStore.class)
 */
@AutoConfiguration
@ConditionalOnClass(AzureVectorStore.class)
class AzureVectorStoreAutoConfiguration {
    // Bean definitions for Azure AI Search
}

/**
 * Creates Azure vector store
 * 
 * @Bean
 * @ConditionalOnMissingBean
 * @param properties Azure vector store properties
 * @param embeddingModel Embedding model
 * @return VectorStore implementation
 */
@Bean
@ConditionalOnMissingBean
VectorStore azureVectorStore(
    AzureVectorStoreProperties properties,
    EmbeddingModel embeddingModel
);

Configuration:

spring.ai.vectorstore.azure.url=https://your-search.search.windows.net
spring.ai.vectorstore.azure.api-key=your-key
spring.ai.vectorstore.azure.index-name=vector-index
spring.ai.vectorstore.azure.initialize-schema=true

2-20. Other Vector Stores

Due to space constraints, here are the key configuration examples for the remaining vector stores:

Azure Cosmos DB:

spring.ai.vectorstore.azure-cosmosdb.endpoint=https://your-account.documents.azure.com:443/
spring.ai.vectorstore.azure-cosmosdb.key=your-key
spring.ai.vectorstore.azure-cosmosdb.database-name=vector-db
spring.ai.vectorstore.azure-cosmosdb.container-name=vectors
spring.ai.vectorstore.azure-cosmosdb.initialize-schema=true

Cassandra:

spring.ai.vectorstore.cassandra.keyspace=vector_store
spring.ai.vectorstore.cassandra.table=vectors
spring.ai.vectorstore.cassandra.initialize-schema=true
spring.cassandra.contact-points=localhost:9042
spring.cassandra.local-datacenter=datacenter1

Chroma:

spring.ai.vectorstore.chroma.client.host=localhost
spring.ai.vectorstore.chroma.client.port=8000
spring.ai.vectorstore.chroma.collection-name=my-collection
spring.ai.vectorstore.chroma.initialize-schema=true

PGVector (PostgreSQL):

spring.ai.vectorstore.pgvector.initialize-schema=true
spring.ai.vectorstore.pgvector.schema-name=public
spring.ai.vectorstore.pgvector.table-name=vector_store
spring.ai.vectorstore.pgvector.index-type=HNSW
spring.ai.vectorstore.pgvector.distance-type=COSINE_DISTANCE
spring.ai.vectorstore.pgvector.dimensions=1536
spring.ai.vectorstore.pgvector.remove-existing-vector-store-table=false
spring.datasource.url=jdbc:postgresql://localhost:5432/vectordb
spring.datasource.username=postgres
spring.datasource.password=postgres

Pinecone:

spring.ai.vectorstore.pinecone.api-key=your-api-key
spring.ai.vectorstore.pinecone.environment=us-east1-gcp
spring.ai.vectorstore.pinecone.project-id=your-project-id
spring.ai.vectorstore.pinecone.index-name=my-index
spring.ai.vectorstore.pinecone.namespace=default

Weaviate:

spring.ai.vectorstore.weaviate.scheme=http
spring.ai.vectorstore.weaviate.host=localhost:8080
spring.ai.vectorstore.weaviate.api-key=your-key
spring.ai.vectorstore.weaviate.object-class=Document
spring.ai.vectorstore.weaviate.consistency-level=ONE
spring.ai.vectorstore.weaviate.initialize-schema=true

Milvus:

spring.ai.vectorstore.milvus.client.host=localhost
spring.ai.vectorstore.milvus.client.port=19530
spring.ai.vectorstore.milvus.collection-name=vector_collection
spring.ai.vectorstore.milvus.database-name=default
spring.ai.vectorstore.milvus.embedding-dimension=1536
spring.ai.vectorstore.milvus.index-type=IVF_FLAT
spring.ai.vectorstore.milvus.metric-type=COSINE
spring.ai.vectorstore.milvus.initialize-schema=true

Qdrant:

spring.ai.vectorstore.qdrant.host=localhost
spring.ai.vectorstore.qdrant.port=6334
spring.ai.vectorstore.qdrant.api-key=your-key
spring.ai.vectorstore.qdrant.collection-name=vector_collection
spring.ai.vectorstore.qdrant.initialize-schema=true
spring.ai.vectorstore.qdrant.use-tls=false

MongoDB Atlas:

spring.ai.vectorstore.mongodb.collection-name=vector_store
spring.ai.vectorstore.mongodb.path-name=embedding
spring.ai.vectorstore.mongodb.index-name=vector_index
spring.ai.vectorstore.mongodb.initialize-schema=true
spring.data.mongodb.uri=mongodb+srv://user:pass@cluster.mongodb.net/vectordb

Redis:

spring.ai.vectorstore.redis.uri=redis://localhost:6379
spring.ai.vectorstore.redis.index=vector-index
spring.ai.vectorstore.redis.prefix=doc:
spring.ai.vectorstore.redis.initialize-schema=true

Elasticsearch:

spring.ai.vectorstore.elasticsearch.uris=http://localhost:9200
spring.ai.vectorstore.elasticsearch.index-name=vector-index
spring.ai.vectorstore.elasticsearch.initialize-schema=true
spring.ai.vectorstore.elasticsearch.dimensions=1536

Vector Store Observation

Maven: org.springframework.ai:spring-ai-autoconfigure-vector-store-observation:1.1.2

/**
 * Autoconfigures observation/monitoring for vector store operations
 * Integrates with Spring Boot Actuator for metrics and tracing
 * 
 * @AutoConfiguration
 * @ConditionalOnClass(VectorStore.class)
 * @EnableConfigurationProperties(VectorStoreObservationProperties.class)
 */
@AutoConfiguration
@ConditionalOnClass(VectorStore.class)
@EnableConfigurationProperties(VectorStoreObservationProperties.class)
class VectorStoreObservationAutoConfiguration {
    // Bean definitions for observation
}

/**
 * Observation handler for vector store operations
 * 
 * @Bean
 * @ConditionalOnMissingBean
 * @return Handler for vector store observations
 */
@Bean
@ConditionalOnMissingBean
VectorStoreObservationHandler vectorStoreObservationHandler();

/**
 * Metrics handler for vector store operations
 * 
 * @Bean
 * @ConditionalOnBean(MeterRegistry.class)
 * @param registry Metrics registry
 * @return Metrics handler for vector stores
 */
@Bean
@ConditionalOnBean(MeterRegistry.class)
VectorStoreMeterObservationHandler vectorStoreMeterObservationHandler(
    MeterRegistry registry
);

Configuration:

spring.ai.vectorstore.observations.include-query-content=false
spring.ai.vectorstore.observations.include-results=false
management.metrics.export.prometheus.enabled=true
management.tracing.enabled=true

Usage Examples

Basic Vector Store Usage

import org.springframework.ai.document.Document;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.stereotype.Service;

@Service
public class DocumentSearchService {
    private final VectorStore vectorStore;
    
    public DocumentSearchService(VectorStore vectorStore) {
        this.vectorStore = vectorStore;
    }
    
    public void indexDocuments(List<String> texts) {
        List<Document> documents = texts.stream()
            .map(text -> new Document(text))
            .collect(Collectors.toList());
        
        vectorStore.add(documents);
    }
    
    public List<Document> search(String query, int topK) {
        return vectorStore.similaritySearch(
            SearchRequest.query(query).withTopK(topK)
        );
    }
    
    public List<Document> searchWithFilter(String query, 
                                           String category) {
        return vectorStore.similaritySearch(
            SearchRequest.query(query)
                .withTopK(5)
                .withSimilarityThreshold(0.7)
                .withFilterExpression(
                    Filter.expression("category == '" + category + "'")
                )
        );
    }
}

RAG (Retrieval-Augmented Generation) Pattern

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.document.Document;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.stereotype.Service;

@Service
public class RAGService {
    private final ChatClient chatClient;
    private final VectorStore vectorStore;
    
    public RAGService(ChatClient.Builder chatClientBuilder,
                     VectorStore vectorStore) {
        this.chatClient = chatClientBuilder.build();
        this.vectorStore = vectorStore;
    }
    
    public String answerQuestion(String question) {
        // 1. Retrieve relevant documents
        List<Document> relevantDocs = vectorStore.similaritySearch(
            SearchRequest.query(question).withTopK(3)
        );
        
        // 2. Build context from retrieved documents
        String context = relevantDocs.stream()
            .map(Document::getContent)
            .collect(Collectors.joining("\n\n"));
        
        // 3. Generate answer using context
        String prompt = String.format(
            "Context:\n%s\n\nQuestion: %s\n\nAnswer based on the context:",
            context,
            question
        );
        
        return chatClient.prompt()
            .user(prompt)
            .call()
            .content();
    }
}

Index Types and Distance Metrics

Different vector stores support different index types and distance metrics:

Vector StoreIndex TypesDistance Metrics
PGVectorHNSW, IVFCOSINE, EUCLIDEAN, INNER_PRODUCT
MilvusIVF_FLAT, IVF_SQ8, HNSW, ANNOYCOSINE, L2, IP
QdrantHNSWCOSINE, EUCLIDEAN, DOT
WeaviateHNSWCOSINE, DOT, L2_SQUARED
PineconeAuto-managedCOSINE, EUCLIDEAN, DOT_PRODUCT

Common Configuration Patterns

Schema Initialization

Most vector stores support automatic schema initialization:

# Enable schema initialization
spring.ai.vectorstore.{provider}.initialize-schema=true

# Custom schema/table names
spring.ai.vectorstore.{provider}.table-name=my_vectors
spring.ai.vectorstore.{provider}.index-name=my_index

Index Configuration

Configure index types for optimal performance:

# PGVector: HNSW or IVF
spring.ai.vectorstore.pgvector.index-type=HNSW

# Milvus: IVF_FLAT, IVF_SQ8, HNSW, etc.
spring.ai.vectorstore.milvus.index-type=IVF_FLAT

# Oracle: IVF
spring.ai.vectorstore.oracle.index-type=IVF

Distance/Similarity Metrics

# Cosine similarity (most common)
spring.ai.vectorstore.pgvector.distance-type=COSINE_DISTANCE
spring.ai.vectorstore.milvus.metric-type=COSINE

# Euclidean distance
spring.ai.vectorstore.pgvector.distance-type=EUCLIDEAN_DISTANCE
spring.ai.vectorstore.milvus.metric-type=L2

# Inner product
spring.ai.vectorstore.milvus.metric-type=IP

Embedding Dimensions

Ensure dimensions match your embedding model:

# Common dimensions
spring.ai.vectorstore.{provider}.dimensions=1536  # OpenAI ada-002
spring.ai.vectorstore.{provider}.dimensions=768   # Sentence transformers
spring.ai.vectorstore.{provider}.dimensions=384   # MiniLM models

Vector Store Selection Guide

Use CaseRecommended StoreReason
Large Scale ProductionPinecone, Milvus, WeaviateOptimized for billions of vectors
Existing PostgreSQLPGVectorLeverage existing database
Existing RedisRedis StackLeverage existing cache
Local DevelopmentChroma, QdrantEasy setup, no cloud account
Cloud NativeAzure AI Search, MongoDB AtlasManaged service, auto-scaling
Advanced FilteringWeaviate, QdrantRich query capabilities
Cost SensitivePGVector, ChromaOpen source, self-hosted

Conditional Requirements

Vector store modules activate when:

  1. Vector Store Implementation Class: Specific store's class on classpath
  2. Embedding Model Bean: EmbeddingModel bean available (required for embeddings)
  3. Database Client (for some stores): Database-specific client library present
  4. Configuration Properties: Connection details configured

Summary

Vector store autoconfiguration provides comprehensive support for 20 vector databases with:

  • Common VectorStore interface for consistency
  • Automatic schema initialization
  • Flexible configuration for index types and distance metrics
  • Production-ready observation and monitoring
  • Easy integration with RAG patterns

Install with Tessl CLI

npx tessl i tessl/maven-org-springframework-ai--spring-ai-spring-boot-autoconfigure@1.1.0

docs

index.md

tile.json