weaviate向量库从零开始——weaviate cloud数据向量化完整实例解析

article/2025/8/23 13:23:56

在这里插入图片描述


在上篇《weaviate向量库从零开始——weaviate集合、对象管理从零代码开始详解》我们讲解了weaviate数据库对数据对象的相关操作,但是其相关检索操作并没有相关向量化数据的检索。只有我们启用了相关向量化模型才会对数据对象做向量化并生成相对的向量数据以作语义检索相关的操作。其他相关配置信息请参考上篇文章。

pom:

        <dependency><groupId>io.weaviate</groupId><artifactId>client</artifactId><version>4.7.0</version>  <!-- Check latest version --></dependency>

1.创建带向量化的集合

本地搭建weaviate并选择向量化器的时候可参考以下的代码,其中向量化模型需要自己搭建,如OpenAI-Text-Embeddings等。

public void createCollWithVector((WeaviateClient client) {// 向量化器配置Map<String, Object> text2vecOpenAI = new HashMap<>();Map<String, Object> text2vecOpenAISettings = new HashMap<>();text2vecOpenAISettings.put("properties", new String[]{ "name" });text2vecOpenAI.put("text2vec-openai", text2vecOpenAISettings);Map<String, Object> text2vecCohere = new HashMap<>();Map<String, Object> text2vecCohereSettings = new HashMap<>();text2vecCohereSettings.put("properties", new String[]{ "body" });text2vecCohere.put("text2vec-cohere", text2vecCohereSettings);// 定义向量配置Map<String, WeaviateClass.VectorConfig> vectorConfig = new HashMap<>();vectorConfig.put("name_vector", WeaviateClass.VectorConfig.builder().vectorIndexType("hnsw").vectorizer(text2vecOpenAI).build());vectorConfig.put("body_vector", WeaviateClass.VectorConfig.builder().vectorIndexType("hnsw").vectorizer(text2vecCohere).build());// 在WeaviateClass Builder中定义矢量器WeaviateClass articleClass = WeaviateClass.builder().className(className).properties(Arrays.asList(titleProperty, bodyProperty)).vectorConfig(vectorConfig).build();// 创建集合Result<Boolean> result = client.schema().classCreator().withClass(articleClass).run();
}

2.weaviate cloud向量化实例

2.1.创建Client

java客户端尚未得到官方支持,实例化时手动传递X-Weaviate-Api-KeyX-Weaviate-Cluster-Url标头才能使用向量化器:

public void createClient() {String scheme = "https";String weaviateUrl  = "uvujcdtvtiwvjdnaavdt6q.c0.asia-southeast1.gcp.weaviate.cloud";String weaviateKey  = "Y4kK0TrhOl3mzewXyfpd6gtebEryzBfJWRyJ";Map<String, String> headers = new HashMap<String, String>() { {put("X-Weaviate-Api-Key", weaviateKey);put("X-Weaviate-Cluster-Url", "https://" + weaviateUrl);} };Config config = new Config(scheme, weaviateUrl, headers);try {WeaviateClient client = WeaviateAuthClient.apiKey(config, weaviateKey);} catch (AuthException e) {e.printStackTrace();}
}

2.2.创建带向量化器的集合

我们本此主要是在weaviate cloud上使用,选择的向量化器也是weaviate cloud自带的Weaviate-Text-Embeddings向量化模型(Snowflake/snowflake-arctic-embed-l-v2.0)。

  • Snowflake/snowflake-arctic-embed-m-v1.5
    最适合主要为英语且文本长度通常在 512 个tokens以下的数据集。
  • Snowflake/snowflake-arctic-embed-l-v2.0
    非常适合包含多种语言或需要**更长上下文(最多 8192 个tokens)**的数据集。该模型针对英语和多语言检索任务进行了优化,性能强劲。
public void createCollWithVector(WeaviateClient client, String className) {Map<String, Object> text2vecWeaviate = new HashMap<>();Map<String, Object> text2vecWeaviateSettings = new HashMap<>();text2vecWeaviateSettings.put("properties", new String[]{"title"});text2vecWeaviateSettings.put("model", new String[]{"Snowflake/snowflake-arctic-embed-l-v2.0"});text2vecWeaviateSettings.put("dimensions", new Integer[]{1024});  // 1024, 256text2vecWeaviateSettings.put("base_url", new String[]{"<custom_weaviate_url>"});text2vecWeaviate.put("text2vec-weaviate", text2vecWeaviateSettings);// 定义向量配置Map<String, WeaviateClass.VectorConfig> vectorConfig = new HashMap<>();vectorConfig.put("title_vector", WeaviateClass.VectorConfig.builder().vectorIndexType("hnsw").vectorizer(text2vecWeaviate).build());// 创建集合WeaviateClass clazz = WeaviateClass.builder().className(className).vectorConfig(vectorConfig).build();Result<Boolean> result = client.schema().classCreator().withClass(clazz).run();System.out.println("创建带有向量化器的集合结果:" + result.getResult());}
  • model(可选):用于嵌入生成的模型的名称。
  • dimensions(可选):用于生成嵌入的维数。
  • base_url(可选):Weaviate 嵌入服务的基本 URL。(大多数情况下不需要。)

2.3.添加数据对象

public void ImportObject(WeaviateClient client, String className) {var map1 = Map.of("title", "刘亦菲", "description", "刘亦菲是2000年出生的女演员,2005年9月14日,刘亦菲在《如果爱》中饰演“孙纳”,获得金马奖、金像奖最佳女主角。");var map2 = Map.of("title", "杨幂", "description", "杨幂是85后花旦中的顶流代表,出生日期:1986年9月12日;出生地:北京市;代表奖项:上海电视节白玉兰奖提名、休斯顿国际电影节最佳女主角;以高产量和高话题度闻名。");var sourceObjects = List.of(map1, map2);List<HashMap<String, Object>> objects = new ArrayList<>();for (Map<String, String> sourceObject : sourceObjects) {HashMap<String, Object> schema = new HashMap<>();schema.put("title", sourceObject.get("title"));schema.put("description", sourceObject.get("description"));objects.add(schema);}// 批量写入ObjectsBatcher batcher = client.batch().objectsBatcher();for (Map<String, Object> properties : objects) {batcher.withObject(WeaviateObject.builder().className(className).properties(properties)// .tenant("tenantA")  // 如果启用了多租户,请指定要添加对象的租户。.build());}// Flushbatcher.run();}

2.4.查询数据对象

    public void readObject(WeaviateClient client, String className) {Result<List<WeaviateObject>> result = client.data().objectsGetter().withClassName(className)
//                .withID(id).withVector().run();System.out.println(result.getResult());}

2.5.向量搜索(语义检索)

public void queryData(WeaviateClient client, String className) {Fields returnFields = Fields.builder().fields(new Field[]{Field.builder().name("description").build(),}).build();NearTextArgument nearText = NearTextArgument.builder().concepts(new String[]{"出生地"}).build();String nearTextQuery = GetBuilder.builder().className("DemoCollection").fields(returnFields).withNearTextFilter(nearText).limit(2).build().buildQuery();Result<GraphQLResponse> nearTextResult = client.graphQL().raw().withQuery(nearTextQuery).run();if (nearTextResult.hasErrors()) {System.err.println(nearTextResult.getError());} else {System.out.println("向量检索结果: " + nearTextResult.getResult().getData());}}

2.6.实例执行

createCollWithVector(client, "DemoCollection");
ImportObject(client, "DemoCollection");
readObject(client, "DemoCollection");
queryData(client, "DemoCollection");

readObject()查询结果:

[WeaviateObject(id=3c367697-5873-4ad2-be1e-e2f5c2ad9e1a, className=DemoCollection, creationTimeUnix=1747038079383, lastUpdateTimeUnix=1747038079383, properties={description=杨幂是85后花旦中的顶流代表,出生日期:1986年9月12日;出生地:北京市;代表奖项:上海电视节白玉兰奖提名、休斯顿国际电影节最佳女主角;以高产量和高话题度闻名。, title=杨幂}, additional=null, vector=null, vectors={title_vector=[Ljava.lang.Float;@59e32960}, vectorWeights=null, tenant=null), WeaviateObject(id=965aceb5-5ae9-4c60-a2ea-b93d0ac96736, className=DemoCollection, creationTimeUnix=1747038079383, lastUpdateTimeUnix=1747038079383, properties={description=刘亦菲是2000年出生的女演员,2005年9月14日,刘亦菲在《如果爱》中饰演“孙纳”,获得金马奖、金像奖最佳女主角。, title=刘亦菲}, additional=null, vector=null, vectors={title_vector=[Ljava.lang.Float;@7c214cc0}, vectorWeights=null, tenant=null)]

可以明显看出向量数据已经生成

queryData()执行结果:

向量检索结果: {Get={DemoCollection=[{description=刘亦菲是2000年出生的女演员,2005年9月14日,刘亦菲在《如果爱》中饰演“孙纳”,获得金马奖、金像奖最佳女主角。}, {description=杨幂是85后花旦中的顶流代表,出生日期:1986年9月12日;出生地:北京市;代表奖项:上海电视节白玉兰奖提名、休斯顿国际电影节最佳女主角;以高产量和高话题度闻名。}]}}


http://www.hkcw.cn/article/LckkYmsVjx.shtml

相关文章

NC65 startup.bat||sysConfig.bat||stop.bat闪退

NC65 双击 startup.bat NC65 双击 sysConfig.bat NC65 双击 stop.bat 闪退 sysConfig.bat不可以使用 选择sysConfig.bat右键编辑&#xff0c;加入下列代码 set JAVA_HOME"E:\NCsystem\yonyouzhengshi20250516\yonyouzhengshi\ufjdk"其中路径为home下面的ufjdk 原…

09《从依赖管理到容器化部署:Maven 全链路实战笔记,解锁 Java 项目自动化构建的终极奥秘》

目录 一、Maven 核心基础强化 &#xff08;一&#xff09;Maven 架构与工作原理 1. 核心组件解析 2. 工作流程图示​编辑 &#xff08;二&#xff09;项目结构深度实践 1. 标准目录扩展说明 2. 多模块项目典型结构示例​编辑 二、依赖管理高级进阶 &#xff08;一&…

t006-艺体培训机构业务管理系统

项目演示视频 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装艺体培训机构业务管理系统软件来发挥其高效地…

贵州公路上300斤巨石砸汽车 地质灾害引发险情

贵州公路上300斤巨石砸汽车 地质灾害引发险情!5月28日,贵州毕节市七星关区何官屯镇的一条通村公路上发生落石事故。一块约300斤重的巨石砸中一辆过路汽车,导致车辆从路边高坎坠落。司机受轻伤,送医检查后当日返家,车损由保险公司处理。落石还击碎了附近民房的玻璃门,但无…

Whole-body Humanoid Robot Locomotion with Human Reference

Whole-body Humanoid Robot Locomotion with Human Reference 研究动机解决方案技术路线基于AMP从人类参考运动中学习人形机器人端到端强化学习 实验结果 Whole-body Humanoid Robot Locomotion with Human Reference 研究动机 传统机器人控制算法通常依赖对环境的准确建模&a…

行业沙龙 | 博睿数据联合承办2025 湾区金科(FinTech)沙龙——智能运维专场,分享主题演讲

日前&#xff0c;由深圳市金融科技协会主办、深圳金融AI生态联盟与博睿数据联合承办的湾区金科(FinTech)沙龙(第七十二期)——智能运维专场&#xff0c;在深圳成功举办。本次沙龙聚焦金融行业运维转型升级&#xff0c;旨在推动智能运维的蓬勃发展与广泛应用&#xff0c;助力金融…

鲜羊奶对青少年心理健康的 “技术向” 营养支持

在数字化浪潮席卷心理健康领域的今天&#xff0c;当我们聚焦 AI 心理测评、大数据情绪监测时&#xff0c;羊大师却从生物化学 “底层代码” 切入 —— 发现鲜羊奶中的营养成分&#xff0c;正以类似 “技术优化” 的逻辑&#xff0c;为青少年心理健康提供独特支撑。以下从三大 “…

【达梦数据库】临时表空间不足

问题1&#xff1a;SQL应用端报错&#xff1a;超出表空间限制 1、应用执行SQL的过程中&#xff0c;临时表空间占用率超过100%&#xff0c;报错&#xff1a; 2、查看数据库日志&#xff0c;未发现任何有关的报错&#xff1b; 3、增加临时表空间的数据文件1个&#xff0c;最大值…

InnoDB中的锁

InnoDB中的锁机制是MySQL中实现事务隔离和数据一致性的核心部分。它通过多种锁类型和等级&#xff0c;控制多个事务对同一数据的并发访问&#xff0c;保证数据的完整性与一致性。 主要锁类型 1.行锁&#xff08;Row Lock&#xff09; 定义&#xff1a;锁定单个行记录。InnoDB…

2025年OE SCI2区TOP,进化麻雀搜索算法ESSA+海洋阻尼器迟滞建模与辨识,深度解析+性能实测

目录 1.摘要2.麻雀搜索算法SSA原理3.ESSA算法4.结果展示5.参考文献6.代码获取7.读者交流 1.摘要 海洋阻尼器的机械性能通常具有高度非线性&#xff0c;以适应动态和冲击环境。阻尼器经过动态和冲击测试&#xff0c;发现其滞回曲线具有速率依赖性且呈非对称性。为了能够描述动态…

贝锐蒲公英工业路由器R300A海外版:支持多国4G频段,全球组网

为更好地满足全球部署和企业出海项目的多样化需求&#xff0c;贝锐蒲公英异地组网工业路由器R300A海外版全新上市&#xff0c;并已正式上架速卖通&#xff01;无论是跨国分支机构协同办公&#xff0c;还是海外工厂设备远程运维&#xff0c;R300A海外版都能为企业提供灵活、高性…

SQL的查询优化

1. 查询优化器 1.1. SQL语句执行需要经历的环节 解析阶段&#xff1a;语法分析和语义检查&#xff0c;确保语句正确&#xff1b;优化阶段&#xff1a;通过优化器生成查询计划&#xff1b;执行阶段&#xff1a;由执行器根据查询计划实际执行操作。 1.2. 查询优化器 查询优化器…

为什么在我的Flask里面有两个路由,但是在网页里有一个却不能正确访问到智能体

1. /zhoushibo 能访问&#xff0c;/chat 直接浏览器访问报 Method Not Allowed 原因&#xff1a; /zhoushibo 路由是你用 app.route(/zhoushibo) 定义的&#xff0c;返回的是一个HTML网页&#xff0c;浏览器访问没问题。 /chat 路由你用的是 app.route(/chat, methods[POST])…

【笔记】suna部署之获取 Tavily API key

#工作记录 Tavily 注册 Tavily 账号5&#xff1a; 打开浏览器&#xff0c;访问 Tavily 官网Tavily AI。点击页面上的 “注册” 按钮&#xff0c;按照提示填写注册信息&#xff0c;如邮箱地址、设置密码等&#xff0c;完成注册流程。也可以选择使用 Google 或 GitHub 账号授权登…

openbmc kvm vnc client connection

1. VNC 介绍&#xff1a; VNC&#xff08;Virtual Network Computing&#xff0c;虚拟网络计算&#xff09; 是一种远程桌面协议&#xff08;RDP 的替代方案&#xff09;&#xff0c;允许用户通过网络控制另一台计算机的图形界面。其核心特点是 跨平台、开源、基于帧缓冲&…

OpenEuler 22.03 安装 nacos 2.5.1 集群

零&#xff1a;规划 本次计划安装三台OpenEuler 22.03 版本操作系统的服务器&#xff0c;用于搭建 nacos 集群。这里使用 2.5.1版本 的原因&#xff0c;是因为它是2.x当前的稳定版本 服务器名IP地址作用其他应用flink01192.168.159.133主jdk11、flink-1.17.2flink02192.168.15…

ES中must与filter的区别

在 Elasticsearch 的布尔查询&#xff08;bool query&#xff09;中&#xff0c;must 和 filter 是两个核心子句&#xff0c;它们的核心区别在于 是否影响相关性评分&#xff0c;这直接决定了它们在查询性能、使用场景和结果排序上的差异。以下是详细对比&#xff1a; 一、核心…

MATLAB源代码——基于Rao检验的自适应贝叶斯检测器

此代码适用于信号检测问题,如雷达信号检测、通信系统中的信号存在性检测等。需要根据实际应用调整噪声模型、信号模型以及检测门限的定义。文章目录 MATLAB源代码代码解释以下是基于 Rao 检验 的 自适应贝叶斯检测器 的一个 MATLAB 示例例程。这个例程假设检测问题为高斯分布下…

2025推客系统小程序开发:独立部署源码交付,高性价比裂变增长引擎

在私域流量争夺白热化的今天&#xff0c;源码独立部署的推客系统小程序已成为企业构建自主分销体系、降低获客成本的核心利器。基于成熟案例与技术沉淀&#xff0c;我们提供安全可控、高性价比的一站式解决方案&#xff0c;助力企业快速搭建专属推客生态&#xff0c;实现长效增…

多家医院回应药企向医生行贿 调查正在进行中

近日,一则关于某药企被举报向四川多家医院上百名医生行贿的消息引发广泛关注。举报材料提及四川省内包括成都市、绵阳市、广安市在内的多个城市的医疗机构,共计37家。达州市第一人民医院工作人员表示,举报信中提到的医生在院方员工名单中并不存在。成都医学院第一附属医院和…