当前位置: 首页 > news >正文

89_Spring AI 干货笔记之 GemFire 向量存储

一、GemFire 向量存储

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

GemFire 是一个分布式的内存键值存储,能以极快的速度执行读写操作。它提供高可用的并行消息队列、持续可用性以及事件驱动架构,您可以动态扩展而无需停机。随着数据规模需求增长以支持高性能实时应用,GemFire 能够轻松实现线性扩展。

GemFire VectorDB 扩展了 GemFire 的能力,作为一个通用的向量数据库,可以高效地存储、检索和执行向量相似性搜索。

二、先决条件

  • 启用了 GemFire VectorDB 扩展的 GemFire 集群,安装 GemFire VectorDB 扩展

  • 一个 EmbeddingModel bean 来计算文档嵌入。有关更多信息,请参阅 EmbeddingModel 部分。一个可在本地机器上运行的选项是 ONNX 和 all-MiniLM-L6-v2 句子转换器。

三、自动配置

Spring AI 自动配置、启动器模块的工件名称发生了重大变化。请参阅升级说明以获取更多信息。

将 GemFire VectorStore Spring Boot 启动器添加到项目的 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'}

3.1 配置属性

您可以在 Spring Boot 配置中使用以下属性来进一步配置 GemFireVectorStore。

四、手动配置

如果仅使用 GemFireVectorStore 而不使用 Spring Boot 的自动配置,请将以下依赖项添加到项目的 Maven pom.xml 中:

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-gemfire-store</artifactId></dependency>

对于 Gradle 用户,在 build.gradle 文件的 dependencies 块中添加以下内容以仅使用 GemFireVectorStore:

dependencies{implementation'org.springframework.ai:spring-ai-gemfire-store'}

五、使用

以下示例创建了一个 GemfireVectorStore 实例,而不是使用自动配置:

@BeanpublicGemFireVectorStorevectorStore(EmbeddingModelembeddingModel){returnGemFireVectorStore.builder(embeddingModel).host("localhost").port(7071).username("my-user-name").password("my-password").indexName("my-vector-index").fields(newString[]{"country","year","activationDate"})// 可选:用于元数据过滤的字段.initializeSchema(true).build();}

默认配置连接到 localhost:8080 上的 GemFire 集群。

在应用程序中,创建一些文档:

List<Document>documents=List.of(newDocument("Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!!",Map.of("country","UK","year",2020)),newDocument("The World is Big and Salvation Lurks Around the Corner",Map.of()),newDocument("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("世界").topK(5).similarityThreshold(0.7).filterExpression("country == 'BG' && year >= 2020").build());

或者以编程方式使用 Filter.Expression DSL:

FilterExpressionBuilderb=newFilterExpressionBuilder();vectorStore.similaritySearch(SearchRequest.builder().query("世界").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)

  • NOT IN:country nin [‘BG’, ‘NL’] → NOT country:(BG OR NL)

  • AND/OR:用于组合条件的逻辑运算符

  • 分组:使用括号处理复杂表达式

  • 日期过滤:ISO 8601 格式的日期值(例如 2024-01-07T14:29:12Z)

要在 GemFire VectorStore 中使用元数据过滤,您必须在创建向量存储时指定可过滤的元数据字段。这是通过构建器中的 fields 参数完成的:

GemFireVectorStore.builder(embeddingModel).fields(newString[]{"country","year","activationDate"}).build();

或者通过配置属性:

spring.ai.vectorstore.gemfire.fields=country,year,activationDate
http://www.jsqmd.com/news/380383/

相关文章:

  • 2026年国土空间规划调整技术服务专业机构深度评测 - 2026年企业推荐榜
  • 2026年四川电线电缆厂家实力盘点与选型指南 - 2026年企业推荐榜
  • D.二分查找-二分答案-最小化最大值——2064. 分配给商店的最多商品的最小值
  • 西安买房服务如何选?2026年值得关注的五家实力公司 - 2026年企业推荐榜
  • 2026循环水药剂厂家甄选指南:聚焦口碑与技术硬实力 - 2026年企业推荐榜
  • 2026年宜兴地区硝化菌剂供应商可靠性综合测评与选择指南 - 2026年企业推荐榜
  • 一文搞懂掌控消息全链路(2)——RabbitMQ/Spring-AMQP高级特性之消息可靠性和重试机制:核心原理+实战案例
  • 固镇小户型装修指南:2026年2月五大品牌实力横评 - 2026年企业推荐榜
  • 2026年编制考试培训机构口碑盘点与深度解析 - 2026年企业推荐榜
  • 日志级别是摆设吗?
  • 2026年Q1全液压钻机可靠源头厂家五强榜单及选型指南 - 2026年企业推荐榜
  • 2026纹身贴高产能厂商综合实力TOP5盘点 - 2026年企业推荐榜
  • 5个维度解决3D打印文件处理难题:Blender 3MF插件实战指南
  • 如何用League Director实现高效专业级《英雄联盟》高光视频制作
  • 3步告别C盘爆红:Windows Cleaner终极清理指南
  • Smart AutoClicker 3.3.0焕新发布:智能图像识别自动化工具的效能飞跃
  • 应用层:FTP、TELNET、应用进程通信(套接字)
  • 3个步骤搞定开源电子书工具:零代码实现专业EPUB制作
  • XUnity.AutoTranslator:Unity游戏本地化的3大技术突破与5个实战场景指南
  • 4大维度解析开源内容访问工具:突破信息壁垒的实用指南
  • 魔兽争霸3帧率优化完全指南:从技术瓶颈到180帧实战方案
  • 突破AMD平台调试瓶颈:SMU Debug Tool的硬件级优化实战指南
  • 2026年可靠的铝合金母线槽,耐火母线槽厂家行业实力榜单 - 品牌鉴赏师
  • 无损音乐获取新方案:NeteaseCloudMusicFlac技术解析与应用指南
  • NBTExplorer跨平台数据编辑终极解决方案:零基础也能掌握的Minecraft NBT文件管理指南
  • 4个步骤完美解决跨平台手柄适配难题
  • 当1000条素材压垮创作:XHS-Downloader的效率革命
  • Revelation:解决Minecraft光影性能与画质矛盾的3个创新方案
  • DLSS Swapper智能文件管理工具完整指南:提升游戏性能的终极方案
  • ThinkPad散热优化与静音方案:告别风扇噪音的终极指南