|
此版本仍在开发中,尚未被视为稳定版。如需最新的快照版本,请使用 Spring AI 1.1.3! |
GemFire 向量存储
本节将引导您设置用于存储文档嵌入并执行相似性搜索的GemFireVectorStore。
GemFire 是一个分布式、内存中的键值存储,以闪电般的速度执行读写操作。它提供高度可用的并行消息队列、持续可用性和事件驱动架构,可以在不停机的情况下动态扩展。随着您的数据大小需求增加以支持高性能、实时应用程序,GemFire 可以轻松实现线性扩展。
GemFire 向量数据库 扩展了 GemFire 的能力,作为一个多功能的向量数据库,能够高效地存储、检索并执行向量相似性搜索。
前置条件
-
启用 GemFire VectorDB 扩展的 GemFire 集群
-
用于计算文档嵌入的
EmbeddingModelbean。有关更多信息,请参阅 EmbeddingModel 部分。 在本地机器上运行的一个选项是 ONNX 和 all-MiniLM-L6-v2 句子转换器。
Auto-configuration
|
Spring AI自动配置和starter模块的artifact名称有了重大变化。 请参阅升级说明获取更多信息。 |
将 GemFire VectorStore Spring Boot starter 添加到项目的 Maven 构建文件 pom.xml 中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-vector-store-gemfire</artifactId>
</dependency>
或到您的 Gradle build.gradle 文件
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-vector-store-gemfire'
}
配置属性
你可以在 Spring Boot 配置中使用以下属性来进一步配置 GemFireVectorStore。
| <property> </property> | 默认值 |
|---|---|
|
本机主机 |
|
8080 |
|
|
|
spring-ai-gemfire-store |
|
100 |
|
16 |
|
COSINE |
|
[] |
|
0 |
|
null |
|
null |
|
null |
手动配置
要仅使用GemFireVectorStore,而不使用Spring Boot的自动配置,请将以下依赖项添加到项目中的Mavenpom.xml:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-gemfire-store</artifactId>
</dependency>
对于使用 Gradle 的用户,请在 dependencies 块下将以下内容添加到您的 build.gradle 文件中以仅使用 GemFireVectorStore:
dependencies {
implementation 'org.springframework.ai:spring-ai-gemfire-store'
}
用法
这是一个示例,它创建了 GemfireVectorStore 的实例,而不是使用自动配置
@Bean
public GemFireVectorStore vectorStore(EmbeddingModel embeddingModel) {
return GemFireVectorStore.builder(embeddingModel)
.host("localhost")
.port(7071)
.username("my-user-name")
.password("my-password")
.indexName("my-vector-index")
.fields(new String[] {"country", "year", "activationDate"}) // Optional: fields for metadata filtering
.initializeSchema(true)
.build();
}
|
默认配置连接到位于 |
-
在您的应用程序中,创建几个文档:
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.builder().query("Spring").topK(5).build());
你应该获取包含文本“Spring AI rocks!!”的文档。
你还可以使用相似度阈值来限制结果数量:
List<Document> results = vectorStore.similaritySearch(
SearchRequest.builder().query("Spring").topK(5)
.similarityThreshold(0.5d).build());
元数据过滤
您可以将通用且可移植的元数据过滤器与GemFire VectorStore一起使用。
例如,您可以使用文本表达式语言:
vectorStore.similaritySearch(SearchRequest.builder()
.query("The World")
.topK(5)
.similarityThreshold(0.7)
.filterExpression("country == 'BG' && year >= 2020").build());
或以编程方式使用 Filter.Expression DSL:
FilterExpressionBuilder b = new FilterExpressionBuilder();
vectorStore.similaritySearch(SearchRequest.builder()
.query("The World")
.topK(5)
.similarityThreshold(0.7)
.filterExpression(b.and(
b.eq("country", "BG"),
b.gte("year", 2020)).build()).build());
| 这些(可移植的)过滤表达式将自动转换为GemFire VectorDB的专有查询格式。 |
例如,此可移植的过滤器表达式:
country == 'BG' && year >= 2020
被转换为专有的 GemFire VectorDB 过滤器格式:
country:BG AND year:[2020 TO *]
GemFire VectorStore 支持广泛的过滤操作:
-
相等:
country == 'BG'→country:BG -
不相等:
city != 'Sofia'→city: NOT Sofia -
大于:
year > 2020→year:{2020 TO *] -
大于或等于:
year >= 2020→year:[2020 TO *] -
小于:
year < 2025→year:[* TO 2025} -
小于等于:
year ⇐ 2025→year:[* TO 2025] -
IN:
country in ['BG', 'NL']→country:(BG OR NL) -
不在其中:
country nin ['BG', 'NL']→NOT country:(BG OR NL) -
AND/OR: 用于组合条件的逻辑运算符
-
分组: 使用括号进行复杂表达式分组
-
日期过滤: 日期值采用ISO 8601格式(例如,
2024-01-07T14:29:12Z)
|
要使用 GemFire VectorStore 的元数据过滤,您必须在创建向量存储时指定可以过滤的元数据字段。这是通过在构建器中使用
通过配置属性:
|