【拥抱AI】如何使用Milvus向量数据库进行数据库检索?

使用向量数据库进行数据库检索是一种高效的方法,特别是在处理大规模、高维度的数据时。以下是详细的步骤,帮助你理解和实施这一过程:

1. 准备环境

选择向量数据库

常见的向量数据库有:

  • Faiss:由Facebook AI Research开发,适用于大规模向量搜索。
  • Milvus:开源的向量数据库,支持多种索引类型和相似度度量。
  • Elasticsearch:虽然主要是全文搜索引擎,但也支持向量搜索功能。
安装和配置

根据你选择的向量数据库,安装并配置相应的环境。例如,对于Milvus,你可以使用Docker来快速部署:

docker pull milvusdb/milvus:latest
docker run -d --name milvus_cpu -p 19530:19530 -p 19121:19121 -v /path/to/data:/var/lib/milvus milvusdb/milvus:latest

2. 数据准备

生成Embedding

使用预训练模型或自训练模型生成数据的embedding。例如,使用BERT生成文本的embedding:

from transformers import BertTokenizer, BertModel
import torchtokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')def get_embedding(text):inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True)with torch.no_grad():outputs = model(**inputs)return outputs.last_hidden_state.mean(dim=1).squeeze().numpy()
格式化数据

将生成的embedding和相关元数据(如ID、标签等)格式化为适合向量数据库的格式。例如:

data = [{"id": 1, "vector": get_embedding("这是一个示例文本")},{"id": 2, "vector": get_embedding("另一个示例文本")},# 更多数据...
]

3. 插入数据

连接到向量数据库

使用向量数据库的客户端库连接到数据库。例如,使用Milvus的Python SDK:

from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collectionconnections.connect("default", host="localhost", port="19530")fields = [FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=768)
]schema = CollectionSchema(fields, "示例集合")
collection = Collection("example_collection", schema)# 插入数据
entities = [[item["id"] for item in data],[item["vector"] for item in data]
]collection.insert(entities)

4. 构建索引

为了提高搜索效率,需要构建索引。例如,在Milvus中:

index_params = {"index_type": "IVF_FLAT","params": {"nlist": 1024},"metric_type": "L2"
}collection.create_index(field_name="vector", index_params=index_params)

5. 执行相似性搜索

生成查询向量

使用同样的方法生成查询向量:

query_vector = get_embedding("查询文本")
发起查询

使用向量数据库的API发起相似性搜索:

search_params = {"metric_type": "L2", "params": {"nprobe": 10}}
results = collection.search([query_vector], "vector", search_params, limit=5)for result in results[0]:print(f"ID: {result.id}, 距离: {result.distance}")

6. 处理返回结果

根据返回的结果,可以进一步处理和展示。例如,从传统数据库中获取更多详细信息:

# 假设你有一个传统数据库,存储了更多的元数据
import sqlite3conn = sqlite3.connect('example.db')
cursor = conn.cursor()for result in results[0]:cursor.execute("SELECT * FROM items WHERE id=?", (result.id,))item = cursor.fetchone()print(item)

总结

通过上述步骤,你可以使用向量数据库进行高效的数据库检索。关键步骤包括生成embedding、插入数据、构建索引、执行相似性搜索和处理返回结果。选择合适的向量数据库和索引策略,可以显著提高检索性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬件工程师零基础入门:一.电子设计安全要点与欧姆定律

硬件工程师零基础入门:一.电子设计安全要点与欧姆定律 第一节 电子设计安全要点第二节 欧姆定律 第一节 电子设计安全要点 电路小白最好先买直流稳压电源(将高压转成低压直流电)使用,尽量不要使用市电。 1.尽量不要捏住电源两端。 正确做法&a…

ShuffleNet:一种为移动设备设计的极致高效的卷积神经网络

摘要 https://arxiv.org/pdf/1707.01083 我们介绍了一种名为ShuffleNet的计算效率极高的卷积神经网络(CNN)架构,该架构专为计算能力非常有限的移动设备(例如10-150 MFLOPs)而设计。新架构利用两种新操作:逐…

python基础导包

Python项目代码结构与导包详解 目录 引言 Python项目的基本结构 2.1 单文件项目2.2 多模块项目2.3 包结构项目2.4 示例项目结构 模块与包 3.1 模块(Module)3.2 包(Package)3.3 子包(Subpackage) 导包&a…

学习Zookeeper

Zookeeper有手就行 1. 初识ZooKeeper1.1 安装ZooKeeper1.2 ZooKeeper命令操作1.2.1 Zookeeper数据模型1.2.2 Zookeeper 服务端常用命令1.2.3 Zookeeper客户端常用命令 2. ZooKeeperJavaAPl操作2.1 Curator介绍2.2 CuratorAPI常用操作2.2.0 引入Curator支持2.2.1 建立连接2.2.2 …

ctfshow-Misc入门(1-16)

misc1 查看图片得到flag misc2 1、打开文本,发现以“塒NG”开头 3、修改文件格式为png格式 4、查看图片,得到flag *遇到的问题:无法直接修改后缀名 *解决方法:需要点击文件夹,然后点击查看,将文件拓…

由于centos停更,yum、docker等不支持,采用阿里云仓库搭建K8S

一:准备 服务器信息主机名IP地址Centos7.9node1-master192.168.35.130Centos7.9node2192.168.35.131 # 查看系统版本 cat /etc/centos-release # 查看内核版本 uname -sr二:服务器前置操作 每个节点都需要操作 #使用 hostnamectl set-hostname设置主机…

什么是串口通信

串口通信(Serial Communications)是一种广泛使用的通信方式,特别是在计算机与外部设备之间的数据传输中。以下是对串口通信及其流程的详细介绍: 一、串口通信概述 定义:串口通信是指外设和计算机间,通过数…

Java 8 Stream API 在数据转换中的应用 —— 将列表转换为映射

文章目录 背景原因1. 数据库设计或约束问题2. 业务逻辑问题3. 测试数据4. 数据库同步问题5. 编程错误 如何避免和处理键冲突1. 数据库层面2. 业务逻辑层面3. 测试数据管理4. 代码层面示例代码 总结 背景 本文实际生产案例讲解配套文章:sysUserList 中为何会出现多个…

实践指南:EdgeOne与HAI的梦幻联动

在当今快速发展的数字时代,安全和速度已成为网络服务的基石。EdgeOne,作为腾讯云提供的边缘安全加速平台,以其全球部署的节点和强大的安全防护功能,为用户提供了稳定而高效的网络体验。而HAI(HyperApplicationInventor…

词云图大师(WordCloudMaster): 探索创意无限的词云世界!

在信息化时代,如何以一种新颖且富有创意的方式表达数据、文字或想法?答案是词云图!而词云图大师(WordCloudMaster),正是您的绝佳选择。 无论是个人创意项目,还是专业工作中的数据可视化,词云图大师都能以强…

二分法(折半法)查找【有动图】

二分法,也叫做折半法,就是一种通过有序表的中间元素与目标元素进行对比,根据大小关系排除一半元素,然后继续在剩余的一半中进行查找,重复这个过程直至找到目标值或者确定目标值不存在。 我们从结论往回推,…

PL/I语言的起源?Objective C语言起源哪里?JavaScript的起源?Java的起源?B语言的起源?C++语言的起源?C#的起源?

PL/I语言的起源 在20世纪50~60年代,当时主流的编程语言是COBOL/FORTRAN/ALGOL等,IBM想要设计一门通用的编程语言,已有的编程语言无法实现此要求,故想要设计一门新语言,即是PL/I. PL/I是Programming Language/One的缩写…

labview关于文件路径的问题

在调用文件或拆分文件的时候经常会用到拆分路径函数和创建路径函数,最常用的也是当前应用程序目录或者是当前VI目录。 这里我们看到应用程序目录和VI目录在同一项目中,应用程序目录更像是根目录,往下拆分成了各个VI的子目录。 接下来我们来拆…

Vue + Websocket播放PCM(base64转ArrayBuffer、 字符串转ArrayBuffer)

文章目录 引言I 音视频处理相关概念和APIII 案例:基于开源库 pcm-player方式播放借助MediaSource和Audio对象播放音频流。基于原生api AudioContext 播放操作III 格式转换js字符串转ArrayBufferbase64 转 ArrayBufferIV 解决pcm-player分片播放问题引言 需求: 基于webscoket传…

钉钉授权登录

一.找开钉钉开发平台【钉钉开放平台 (dingtalk.com)】 二。点击菜单【应用开发】->左边【钉钉应用】->【创建应用】 三。创建应用-》保存成功后,点击自己【新建的应用】,进入详细页面 四。进入应用详细页面。左边【分享设置】 注意:进…

kali中信息收集的一些常用工具

这里只是代表个人所见,所以肯定会有其他的没提到,希望大家体谅 前言 信息收集分为主动和被动的 主动就是通过自己的机器去和对方比如通信后获得的数据 被动是指不是在自己这里获取的,可以是第三方平台获取到的,与目标没有通信 …

Apple Vision Pro开发003-PolySpatial2.0新建项目

unity6.0下载链接:Unity 实时开发平台 | 3D、2D、VR 和 AR 引擎 一、新建项目 二、导入开发包 com.unity.polyspatial.visionos 输入版本号 2.0.4 com.unity.polyspatial(单独导入),或者直接安装 三、对应设置 其他的操作与之前的版本相同…

YB2503HV:高效率降压IC,助力电动车、太阳能设备等领域的能源转换

今天我要向大家介绍一款引人注目的产品—— YB2503HV 100V 3A SOP8内置MOS 高效率降压IC。这款单片集成芯片具备可设定输出电流的开关型降压恒压驱动器功能,可广泛应用于电动车、太阳能设备、电子电池充电等领域。让我们一起来看看它的特点和应用吧! 首先…

@EnableConfigurationProperties @ConfigurationProperties

EnableConfigurationProperties && ConfigurationProperties的使用时机 今天在写properties时想到了这个问题,为什么有时候我需要写EnableConfigurationProperties有时候又不需要呢?下面就详细讲讲。 Data Component ConfigurationProperties(pr…

【Unity踩坑】在Mac上安装Cocoapods失败

在集成Unity Ad时,如果是第一次在iOS上集成,会在Mac上安装Cocoapods。 安装时提示下面的错误: Error installing cocoapods:The last version of drb (> 0) to support your Ruby & RubyGems was 2.0.5. Try installing it with gem…