Spring AI 中的 Elasticsearch 向量数据库集成了 Elasticsearch 的向量功能,提供向量存储和搜索能力。

概述

Elasticsearch 向量数据库支持:

  • 分布式向量存储
  • 高级搜索功能
  • 实时向量操作
  • 全文搜索集成

特性

分布式存储

分布式向量存储

高级搜索

丰富的搜索功能

实时

实时操作

集成

全文搜索集成

实现

基本设置

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-elasticsearch-vectordb</artifactId>
    <version>${spring-ai.version}</version>
</dependency>

配置

# Elasticsearch 向量数据库配置
spring.ai.elasticsearch.vectordb.enabled=true
spring.ai.elasticsearch.vectordb.host=localhost
spring.ai.elasticsearch.vectordb.port=9200
spring.ai.elasticsearch.vectordb.index-name=vectors

用法

@Service
public class ElasticsearchVectorService {
    private final ElasticsearchVectorClient vectorClient;

    public ElasticsearchVectorService(ElasticsearchVectorClient vectorClient) {
        this.vectorClient = vectorClient;
    }

    public void storeVector(String id, float[] vector, Map<String, Object> metadata) {
        vectorClient.store(id, vector, metadata);
    }

    public List<SearchResult> searchSimilar(float[] queryVector, int k) {
        return vectorClient.search(queryVector, k);
    }
}

向量操作

1. 向量存储

@Configuration
public class ElasticsearchVectorStorageConfig {
    @Bean
    public VectorStorage elasticsearchVectorStorage(ElasticsearchVectorProperties properties) {
        return new ElasticsearchVectorStorage(properties);
    }
}

2. 相似性搜索

@Configuration
public class ElasticsearchSimilaritySearchConfig {
    @Bean
    public SimilaritySearch elasticsearchSimilaritySearch(ElasticsearchVectorProperties properties) {
        return new ElasticsearchSimilaritySearch(properties);
    }
}

3. 混合搜索

@Service
public class HybridSearchService {
    private final ElasticsearchVectorClient vectorClient;

    public List<SearchResult> hybridSearch(String text, float[] queryVector, int k) {
        return vectorClient.hybridSearch(text, queryVector, k);
    }
}

高级特性

自定义索引配置

@Configuration
public class IndexConfig {
    @Bean
    public IndexConfig indexConfig() {
        return IndexConfig.builder()
            .name("vector-index")
            .dimension(1536)
            .metric(MetricType.COSINE)
            .build();
    }
}

映射配置

@Configuration
public class MappingConfig {
    @Bean
    public MappingConfig mappingConfig() {
        return MappingConfig.builder()
            .vectorField("vector")
            .metadataFields(Arrays.asList("title", "content"))
            .build();
    }
}

监控

management.endpoints.web.exposure.include=elasticsearch-vectordb
management.endpoint.elasticsearch-vectordb.enabled=true

最佳实践

使用 Elasticsearch 向量数据库时,请考虑以下最佳实践:

  • 索引设计:设计高效的索引结构
  • 映射优化:优化字段映射
  • 分片管理:配置适当的分片
  • 查询优化:优化搜索查询
  • 监控:设置全面的监控

故障排除

常见问题及解决方案:

  1. 连接问题

    • 验证主机和端口
    • 检查集群健康状况
    • 查看身份验证
  2. 性能问题

    • 优化索引设置
    • 调整分片配置
    • 查看查询模式
  3. 存储问题

    • 监控索引大小
    • 配置清理
    • 查看保留策略

文档有误?请协助编辑

发现文档问题?点击此处直接在 GitHub 上编辑并提交 PR,帮助我们改进文档!