GemFire 向量数据库

本节将引导您设置 `GemFireVectorStore` 以存储文档嵌入并执行相似性搜索。

GemFire 是一个分布式内存键值存储,能够以极快的速度执行读写操作。它提供高可用性的并行消息队列、持续可用性和事件驱动架构,您可以动态扩展而无需停机。随着数据大小需求的增加以支持高性能的实时应用程序,GemFire 可以轻松线性扩展。

GemFire VectorDB 扩展了 GemFire 的功能,作为一个通用的向量数据库,可以有效地存储、检索和执行向量相似性搜索。

先决条件

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

  2. 一个用于计算文档嵌入的 `EmbeddingModel` bean。有关更多信息,请参阅 EmbeddingModel 部分。一个在您的机器上本地运行的选项是 ONNX 和 all-MiniLM-L6-v2 Sentence Transformers。

自动配置

将 GemFire VectorStore Spring Boot 启动器添加到项目的 Maven 构建文件 `pom.xml`

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

或添加到您的 Gradle `build.gradle` 文件

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

配置属性

您可以在 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 用户,请将以下内容添加到依赖项块下的 `build.gradle` 文件中,以仅使用 `GemFireVectorStore`

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

用法

这是一个创建 `GemfireVectorStore` 实例的示例,而不是使用自动配置

@Bean
public VectorStore vectorStore(EmbeddingModel embeddingModel) {
    return new GemFireVectorStore(new GemFireVectorStoreConfig()
                                    .setIndexName("my-vector-index")
                                    .setPort(7071), embeddingClient);
}

GemFire VectorStore 还不支持 元数据过滤器

默认配置连接到 `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.query("Spring").withTopK(5));

您应该检索包含文本“Spring AI rocks!!”的文档。

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

List<Document> results = vectorStore.similaritySearch(
   SearchRequest.query("Spring").withTopK(5)
      .withSimilarityThreshold(0.5d));