这一部分将指导您设置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!!”的文档。