这一部分将指导您设置GemFire VectorStore来存储文档嵌入,并执行相似性搜索。

GemFire 是一个超高速内存数据和计算网格,具有向量扩展,能够高效存储和搜索向量。

链接:https://docs.vmware.com/en/VMware-GemFire-VectorDB/1.0/gemfire-vectordb/overview.html [GemFire VectorDB]扩展了GemFire的能力,作为一个多功能的向量数据库,它能够高效地存储、检索以及通过一个分布式和弹性的基础架构执行向量搜索:

能力: - 创建索引 - 存储向量及其关联的元数据 - 基于相似性进行矢量搜索

先决条件

通过安装了GemFire Vector Database扩展的链接访问GemFire集群。在登录后,您可以从VMware Tanzu Network下载GemFire VectorDB扩展。

依赖项

把这些依赖项添加到你的项目中:

  • 嵌入式客户端启动器,计算嵌入所必需。

  • 将“Transformers Embedding (Local)”转换并遵循“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</artifactId>
</dependency>
Tip
参考依赖管理部分,将Spring AI BOM添加到您的构建文件中。

样本代码

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

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

@Bean
public VectorStore vectorStore(GemFireVectorStoreConfig config, EmbeddingClient embeddingClient) {
    return new GemFireVectorStore(config, embeddingClient);
}
  • 创建一个向量索引,它将配置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!!”的文档。