GemFire 向量存储

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

GemFire 是一款超高速的内存中数据和计算网格,具有向量扩展功能,可以高效地存储和搜索向量。

GemFire VectorDB 扩展了 GemFire 的功能,充当一个通用的向量数据库,通过分布式和弹性基础设施高效地存储、检索和执行向量搜索。

功能: - 创建索引 - 存储向量和关联的元数据 - 基于相似性执行向量搜索

先决条件

访问安装了 GemFire 向量数据库 扩展的 GemFire 集群。您可以在登录后从 VMware Tanzu 网络 下载 GemFire VectorDB 扩展。

依赖项

将这些依赖项添加到您的项目中

  • 嵌入式客户端启动器,用于计算嵌入。

  • Transformers Embedding(本地)并遵循 ONNX Transformers Embedding 指示。

<dependency>
     <groupId>org.springframework.ai</groupId>
     <artifactId>spring-ai-transformers</artifactId>
</dependency>
  • 添加 GemFire VectorDB 依赖项

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-gemfire-store</artifactId>
</dependency>
请参阅 依赖项管理 部分,将 Spring AI BOM 添加到您的构建文件中。

示例代码

  • 要配置应用程序中的 GemFire,请使用以下设置

@Bean
public GemFireVectorStoreConfig gemFireVectorStoreConfig() {
    return GemFireVectorStoreConfig.builder()
        .withUrl("https://127.0.0.1:8080")
        .withIndexName("spring-ai-test-index")
        .build();
}
  • 创建一个连接到 GemFire VectorDB 的 GemFireVectorStore 实例

@Bean
public VectorStore vectorStore(GemFireVectorStoreConfig config, EmbeddingModel embeddingModel) {
    return new GemFireVectorStore(config, embeddingModel);
}
  • 创建一个向量索引,它将配置 GemFire 区域。

  public void createIndex() {
		try {
			CreateRequest createRequest = new CreateRequest();
			createRequest.setName(INDEX_NAME);
			createRequest.setBeamWidth(20);
			createRequest.setMaxConnections(16);
			ObjectMapper objectMapper = new ObjectMapper();
			String index = objectMapper.writeValueAsString(createRequest);
			client.post()
				.contentType(MediaType.APPLICATION_JSON)
				.bodyValue(index)
				.retrieve()
				.bodyToMono(Void.class)
				.block();
		}
		catch (Exception e) {
			logger.warn("An unexpected error occurred while creating the index");
		}
	}
  • 创建一些文档

    List<Document> documents = List.of(
        new Document("1", getText("classpath:/test/data/spring.ai.txt"), Map.of("meta1", "meta1")),
        new Document("2", getText("classpath:/test/data/time.shelter.txt"), Map.of()),
        new Document("3", getText("classpath:/test/data/great.depression.txt"), Map.of("meta2", "meta2")));
  • 将文档添加到 GemFire VectorDB

vectorStore.add(List.of(document));
  • 最后,检索与查询相似的文档

  List<Document> results = vectorStore.similaritySearch("Spring", 5);

如果一切顺利,您应该检索包含文本“Spring AI rocks!!”的文档。