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

有了向量数据库,我们还需 SQL 数据库吗?

“除了向量数据库外,我是否还需要一个普通的 SQL 数据库?”

这是我们经常被问到的一个问题。如果除了向量数据以外,用户还有其他标量数据信息,那么其业务可能需要在进行语义相似性搜索前先根据某种条件过滤数据,例如:

  • 在法律领域,可能只需要从某个特定数据库中搜索相关的法律条款;

  • 在零售业,可能需要搜索某个尺码的男鞋;

  • 在图像搜索时,可能希望搜索 2010-2016 年上映且 IMDB 电影评分高于 7.0 的电影的海报。

对此,我们的答案是——不需要。用向量数据库 Milvus 或全托管的 Milvus 服务——Zilliz Cloud,就无需额外再维护一个 SQL 数据库存储标量了。只要一个系统,用户便可起送实现“向量搜索+标量过滤”的混合查询,从而获取更精准的搜索结果。

其中,Milvus 允许用户在进行向量搜索时依据标量数据进行条件过滤,数据属性可以是除向量以外的任何字段。Milvus 会对向量字段创建向量索引并进行向量相似性搜索,与此同时,还可以通过表达式对搜索结果进行元数据过滤。只需在搜索时输入过滤表达式,Milvus 就会帮你自动进行这两种操作。

本教程使用 Zilliz Cloud Pipelines—— Zilliz Cloud 内置的功能,用于将非结构化数据编码为 Embedding 向量,同时支持用文本和过滤表达式直接搜索向量。我们将演示如何利用标量过滤来召回只符合某些特定条件的文档片段,例如特定的来源网址,或者特定的文件名称。大家也可以利用类似的思路实现召回带有特定标签的文档,例如发表年份、版本号等。

01. 创建 Collection 和 Pipelines

本教程需要用到 Zilliz Cloud 免费版(海外版)。Zilliz Cloud 是全托管的 Milvus 服务,将用户的数据库部署在 Serverless 云服务器上,但我们仍旧可以通过调用 PyMiluvs API 接口在本地使用 Zilliz Cloud 向量数据库。以下用来测试的文本内容来自于 PyMilvus 文档

  1. 打开 https://cloud.zilliz.com/ 并创建 “Starter” 版本集群。
alt
  1. 添加 Collection 名称,点击“创建 Collection 和 集群”。
alt

默认情况下,创建 Zilliz Cloud 集群时会同时创建 1 个 Collection,本教程中不会使用它。后面我们创建 Zilliz Cloud Pipelines 时,会自动创建另一个 Collection。请注意,这两个 Collection 不相同。

  1. 在左侧导航栏中点击 Piplines,跟随界面提示创建 Pipelines 并上传数据:

a. 请先选择创建“Ingestion Pipeline”。

alt

b. 选择刚刚创建的 Serverless 集群,分别输入 Collection 和 Pipeline 名称,点击“添加 function”。

alt

c. 选择INDEX_DOC function,输入function名称,其他参数值保留默认即可,点击“添加”。这个function会将文档切片生成向量。

alt

d. (可选)再次点击“添加 function”。

alt

e. (可选)选择 PRESERVE function,并为其命名,点击“添加”。这个 function 用来保存文档的标签信息。

alt
  1. 点击“创建 Ingestion Pipeline”。现在,我们已经完成创建 Ingestion Pipeline 和 Collection。
alt
  1. 点击“创建 Deletion 和 Search Pipeline”。

  2. 进入 Pipelines 列表页面,点击按钮“▶️”运行 Ingestion Pipeline。

alt
  1. Ingestion Pipeline支持上传您在对象存储上的文件(例如AWS S3 和 Google Cloud Storage)。本例中我们将数据上传至 AWS S3。上传完成后,点击“通过 Pre-signed-URL 分享”。复制分享链接(Pre-signed URL)。如果没有对象存储,可以使用我们提供的测试文件链接 https://publicdataset.zillizcloud.com/milvus_doc.md 当作Pre-signed URL。
alt
  1. 在代码中粘贴Pre-signed URL 并点击运行。这步会将文件进行分片提取向量并导入到向量数据库 Collection 中。
alt
  1. 进入collection页面,检查 Collection 和 Schema 是否正确。此时文档片段的向量应该已经显示在Data Preview中了。
alt

之后,可以在 Playground 界面上或者通过调用 API 来查询数据。

02. 用标量过滤召回符合特定标签的向量

  1. 在 Pipeline 列表中找到 “Search Pipeline”并点击右侧的按钮“▶️”运行 Search Pipeline。

  2. 在请求中,输入一个问题并点击“运行”。

alt
  1. 编辑“过滤条件”。请使用布尔表达式。点击运行后,可以看到 Zilliz Cloud 已经根据您输入的条件过滤了搜索结果。
alt

用 Zilliz Cloud Pipelines 进行元数据过滤就是这么简单!你可以通过布尔表达式针对除向量字段以外的所有标量字段进行条件过滤。

03. 通过 API 接口进行搜索

同样,我们也可以通过调用 API 接口来进行搜索,使用 API 过程中,用户需要提供以下两点:

  • Zilliz API Token

  • Pipeline ID

我们可以通过集群详情页获取 API Token。

alt

如需获取 Pipeline ID,请先在 Pipelines 列表页找到 Search Pipeline,随后在 Pipeline ID 一栏中复制该 Pipelines 的ID。在调用 API 接口时将 Pipeline ID 粘贴到 URL 中。

alt

import requests, json
url = "https://controller.api.gcp-us-west1.zillizcloud.com/v1/pipelines/pipe-xxxx/run"
headers = {"Content-Type": "application/json","Authorization": f"Bearer {TOKEN}",
}
data = {"data": {"query_text": SAMPLE_QUESTION},"params": {"limit": TOP_K,"offset": 0,# Any of these fields can be used in filter expression."outputFields": ["chunk_text", "chunk_id", "doc_name", "source"],"filter": "doc_name == 'param.html'"}
}# Send the POST request
response = requests.post(url, headers=headers, json=data)

用 API 进行元数据过滤搜索就是这么简单!如果大家有兴趣了解更多 Zilliz Cloud Pipelines 的使用方法,可以参考 Notebook用 Pipelines 搭建一个有标签过滤功能的 RAG 问答机器人,欢迎上手尝试。

本文由 mdnice 多平台发布

相关文章:

有了向量数据库,我们还需 SQL 数据库吗?

“除了向量数据库外,我是否还需要一个普通的 SQL 数据库?” 这是我们经常被问到的一个问题。如果除了向量数据以外,用户还有其他标量数据信息,那么其业务可能需要在进行语义相似性搜索前先根据某种条件过滤数据,例如&a…...

信息网络协议基础-IPv6协议

文章目录 概述为什么引入IP服务模型IPv4的可扩展性问题解决方法***CIDR(Classless Inter-Domain Routing, 无类别域间寻路)前缀汇聚***前缀最长匹配***NAT(网络地址转换)存在的问题解决方案路由表配置***局限性IPv6协议头标IPv6地址表示前缀类型单播地址链路局部地址(Link-Loca…...

VC++ ado 实现单表CURD

继续修改前文的资产管理源码; 新建一个数据库sds;把代码中的数据库连接改为连接此库; 新建下图一个表; 把之前的资产类别管理对话框改为下图所示;对话框ID也改为下图; 资产类别管理菜单和ID改为下图; 直接修改资产类别管理对话框类不太方便,新建一个对话框类,没有关联…...

C#使用switch多路选择语句判断何为季节

目录 一、 switch语句 二、示例 三、生成 一、 switch语句 switch语句是多路选择语句,它通过一个表达式的值来使程序从多个分支中选取一个用于执行的分支。 switch表达式的值只可以是整型、字符串、枚举和布尔类型。 switch语句中多个case可以使用一个break。 在…...

可爱的魔法曲线 Lovely Magical Curves(12年开始只有5个人AC)

一起来交流编程吧!【CSDN app】:http://qm.qq.com/cgi-bin/qm/qr?_wv1027&k3svdDJTlkD76TRRShbxYCYK1zK1c8cyF&authKeyv1pxp6rS8AA4SRy7bflJl9LIwp8d5v0HOudw%2BDxHiWDRqZ1LzjeoBJH1Z1EXnl35&noverify0&group_code546881376 可爱的魔法…...

通过C++程序实现光驱的自动化刻录和读取

文章目录 ISO文件格式光盘的基本概念光盘种类特点DVDR光盘使用windows调用Linux调用Linux平台下用到的C库:读取设备驱动列表向光驱中写文件 数字存储媒体快速发展的今天,光驱的使用已经不像以前那样普及了。但是在数据备份、安装软件和操作系统、旧设备兼容等领域还…...

【电商项目实战】商品详情显示与Redis存储购物车信息

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《电商项目实战》。🎯🎯 &am…...

概率论基础

1.概率论 1.1 随机事件与概率 1.1.1 基本概念 ​ 样本点(sample point): 称为试验 S S S的可能结果为样本点,用 ω \omega ω表示。 ​ 样本空间(sample space):称试验 S S S的样本点构成的集合为样本空间,用 Ω \Omega Ω表示…...

Mac电脑CMake安装和配置

1.从CMake官网下载dmg文件并且安装 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a43f1462b5f743b4ba0bf5302ee76066.png)...

FormData传送复杂数据

FormData 是一个用于创建表单数据对象的 JavaScript 类。它通常用于通过 JavaScript 发送表单数据,尤其是用于发送 AJAX 请求时非常有用。 使用 FormData 可以方便地构建一个以 multipart/form-data 格式提交的表单数据,这允许你在发送 XMLHttpRequest …...

力扣回溯算法-电话号码的字母组合

力扣第17题,电话号码的字母组合 题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 .电话号码的字母组合 示例: 输入:“2…...

运维面试笔试题

目录 shell脚本 nginx 数据库mysql k8s(kubernetes) 安全与防护 网络TCP/IP shell脚本 1 通过正则表达式匹配文本...

Oracle database 静默安装 oracle12c 一键安装 12.1.0.2

基于oracle安装包中应答文件实现一键安装 注意此安装脚本基于12.1.0.2 安装包 原始安装包结构为两个压缩包 此脚本使用安装包为原始压缩包解压后、 重新封装为一个.zip压缩包 建议在linux 环境下解压重新压缩后 使用该脚本 支持环境: Linux :centerOS 7 oracle :12.1.0.…...

【Java EE初阶三 】线程的状态与安全(上)

1. join方法与多线程 1.1 初识多线程 为了提高cpu得利用率,因此就引入了多个线程的概念;即每个线程负责完成整个程序的一部分工作即可。 写一个代码,让主线程,创建一个新的线程,由新线程负责完成运算(12。…...

英飞凌TC3xx之一起认识GTM系列(五)如何实现GTM与DSADC关联的配置

英飞凌TC3xx之一起认识GTM系列(五)如何实现GTM与DSADC关联的配置 1 GTM与DSADC的连接1.1 EDSADC 到 GTM 的连接1.1.1 工作原理说明1.1.2 应用举例1.2 GTM 到 EDSADC 的连接1.2.1 工作原理说明1.2.2 应用举例2 总结编者按:笔者在从事这部分开发工作的时候,看着手册上的各种通…...

小兔鲜儿 uniapp - 购物车模块

目录 加入购物车​ 接口相关​ 购物车列表​ 静态结构​ 登录状态​ 列表渲染​ 删除购物车 接口相关​ 参考代码 修改商品信息​ 接口相关​ ​修改商品数量​ 修改商品选中/全选​ 底部结算信息​ 计算总钱数(总金额)​ 带返回按钮的购物车​ 完成加入购物车…...

Python使用PyMySql增删改查Mysql数据库

PyMysql简介 PyMysql是Python中用于连接MySQL数据库的一个第三方库,它实现了MySQL客户端/服务器协议,使得Python程序能够与MySQL服务器进行交互。由于Python 2的mysql-python(又称mysqldb)模块在Python 3上支持不够完善&#xff0…...

前端实现websocket类封装

随着Web应用程序的发展,越来越多的人开始利用Websocket技术来构建实时应用程序。Websocket是一种在客户端和服务器之间建立持久连接的协议。这种协议可以在一个单独的连接上实现双向通信。与HTTP请求-响应模型不同,Websocket允许服务器自主地向客户端发送…...

鸿蒙开发中的一些小问题

这是我在学习鸿蒙开发中遇见的小问题 Q1&#xff1a;This custom component must have a build function. <etsLint>Q2&#xff1a;page_title is not translated into en_US(American English)Q3&#xff1a;Module "../CustomComponent/CustomButton" declar…...

OpenCV-12绘制图像

OpenCV提供了许多绘制图像的API&#xff0c;可以在图像上绘制各种图形&#xff0c;例如直线&#xff0c;矩形&#xff0c;圆&#xff0c;椭圆等图形。 一、画直线 利用API line&#xff08;img, pt1, pt2, color, thickness, lineType, shift&#xff09;可以绘制直线。 其中…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...