GemFire 向量存储

本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。

本节将指导你配置 GemFireVectorStore 以存储文档向量并执行相似性搜索。

GemFire 是分布式内存键值存储,以极速执行读写操作。它提供高可用并行消息队列、持续可用性及事件驱动架构,支持动态扩展且无需停机。随着实时应用对数据规模的需求增长,GemFire 可轻松实现线性扩展。

GemFire VectorDB 扩展了 GemFire 的功能,作为多功能向量数据库,高效存储、检索并执行向量相似性搜索。

先决条件

  1. 启用 GemFire VectorDB 扩展的 GemFire 集群

  2. 用于计算文档向量的 EmbeddingModel Bean。详细信息请参阅 EmbeddingModel 部分。本地运行可选 ONNX 和 all-MiniLM-L6-v2 Sentence Transformers 方案。

自动配置

Spring AI 自动配置及 Starter 模块的 Artifact 名称已发生重大变更。更多信息请参阅 升级说明

将 GemFire 向量存储 Spring Boot Starter 添加至项目的 Maven 构建文件 pom.xml

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-vector-store-gemfire</artifactId>
</dependency>

或添加到你的 Gradle build.gradle 构建文件中:

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-vector-store-gemfire'
}

配置属性

可通过以下 Spring Boot 配置属性进一步自定义 GemFireVectorStore

属性 默认值

spring.ai.vectorstore.gemfire.host

localhost

spring.ai.vectorstore.gemfire.port

8080

spring.ai.vectorstore.gemfire.initialize-schema

false

spring.ai.vectorstore.gemfire.index-name

spring-ai-gemfire-store

spring.ai.vectorstore.gemfire.beam-width

100

spring.ai.vectorstore.gemfire.max-connections

16

spring.ai.vectorstore.gemfire.vector-similarity-function

COSINE

spring.ai.vectorstore.gemfire.fields

[]

spring.ai.vectorstore.gemfire.buckets

0

手动配置

仅使用 GemFireVectorStore(不启用 Spring Boot 自动配置)需在项目的 Maven pom.xml 中添加以下依赖:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-gemfire-store</artifactId>
</dependency>

Gradle 用户仅使用 GemFireVectorStore 时,需在 build.gradle 文件的 dependencies 块中添加以下内容:

dependencies {
    implementation 'org.springframework.ai:spring-ai-gemfire-store'
}

使用方法

以下示例展示如何手动创建 GemfireVectorStore 实例(而非使用自动配置):

@Bean
public GemFireVectorStore vectorStore(EmbeddingModel embeddingModel) {
    return GemFireVectorStore.builder(embeddingModel)
        .host("localhost")
        .port(7071)
        .indexName("my-vector-index")
        .initializeSchema(true)
        .build();
}

GemFire 向量存储当前暂不支持 元数据过滤器

默认配置连接至 localhost:8080 的 GemFire 集群。

  • 在应用中创建若干文档:

List<Document> documents = List.of(
   new Document("Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!!", Map.of("country", "UK", "year", 2020)),
   new Document("The World is Big and Salvation Lurks Around the Corner", Map.of()),
   new Document("You walk forward facing the past and you turn back toward the future.", Map.of("country", "NL", "year", 2023)));
  • 将文档添加至向量存储:

vectorStore.add(documents);
  • 通过相似性搜索来检索文档:

List<Document> results = vectorStore.similaritySearch(
   SearchRequest.builder().query("Spring").topK(5).build());

你应该能够检索到包含文本 “Spring AI rocks!!” 的文档。

你还可以使用相似性阈值来限制结果数量:

List<Document> results = vectorStore.similaritySearch(
   SearchRequest.builder().query("Spring").topK(5)
      .similarityThreshold(0.5d).build());