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!!”的文档。