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

Milvus向量数据库检索

  官方文档:https://milvus.io/docs/search.md
  本节介绍如何使用 Milvus 搜索实体。
  Milvus 中的向量相似度搜索会计算查询向量与具有指定相似度度量的集合中的向量之间的距离,并返回最相似的结果。您可以通过指定过滤标量字段或主键字段的布尔表达式来执行混合搜索。
  下面的例子展示了如何对2000行的图书ID(主键)、字数(标量场)、图书介绍(向量场)的数据集进行向量相似度搜索,模拟根据搜索条件搜索某本书的情况关于他们的矢量化介绍。 Milvus 会根据您定义的查询向量和搜索参数返回最相似的结果。

1. 加载集合

  在Milvus中,所有的搜索和查询操作都在内存中执行。在进行向量相似度搜索之前,需要将集合加载到内存中。

from pymilvus import Collection
collection = Collection("book")      # Get an existing collection.
collection.load()

2. 准备搜索参数

  准备适合您的搜索场景的参数。
  以下示例定义搜索将使用欧氏距离计算距离,并从 IVF_FLAT 索引构建的十个最接近的簇中检索向量。

search_params = {
    "metric_type": "L2", 
    "offset": 0, 
    "ignore_growing": False, 
    "params": {"nprobe": 10}
}

  参数介绍:
在这里插入图片描述

3. 进行向量搜索

  使用 Milvus 搜索向量。要在特定分区中搜索,请指定分区名称列表。
  Milvus 支持专门为搜索设置一致性级别。本主题中的示例将一致性级别设置为“Strong”。
  您还可以将一致性级别设置为“Bounded有界”、“Session会话”或“Eventually最终”。有关 Milvus 中四个一致性级别的更多信息,请参阅一致性(https://milvus.io/docs/consistency.md)。
  使用支持 GPU 的 Milvus 进行向量搜索时,返回的实体数量应满足以下要求:

  • GPU_IVF_FLAT:返回的实体数量应小于 256。
  • GPU_IVF_PQ:返回的实体数量应小于 1024。

  具体如下:参考内存索引(https://milvus.io/docs/index.md)。
  示例:

results = collection.search(
    data=[[0.1, 0.2]], 			# 用于搜索的向量。
    anns_field="book_intro",    # 要搜索的字段的名称。
    # the sum of `offset` in `param` and `limit` 
    # should be less than 16384.
    param=search_params,        # 特定于索引的搜索参数
    limit=10,                   # 要返回的结果数。该值与 param 中的偏移量之和应小于 16384。
    expr=None,				    # 用于过滤属性的布尔表达式。有关详细信息,请参阅布尔表达式规则(https://milvus.io/docs/boolean.md)。
    # set the names of the fields you want to 
    # retrieve from the search result.
    output_fields=['title'],   # 要返回的字段的名称
    consistency_level="Strong" # 搜索的一致性级别
)

# 查看最相似向量的主键值及其距离、输出的字段。
results[0].ids
results[0].distances
hit = results[0][0]
hit.entity.get('title')

# 当搜索完成时,释放 Milvus 中加载的集合以减少内存消耗。
collection.release()

http://www.kler.cn/a/273063.html

相关文章:

  • 青少年编程能力等级测评CPA Python编程(一级)
  • C语言数据库探索:适合初学者,探索C语言如何与数据库交互
  • 代码随想录第十五天| 110.平衡二叉树 、 257. 二叉树的所有路径 、404.左叶子之和、222.完全二叉树的节点个数
  • 儿童安全座椅行业全面深入分析
  • go 包管理
  • Python毕业设计选题:基于Hadoop的租房数据分析系统的设计与实现
  • 【大数据面试题】 018 数据仓库的分层了解吗?说说你的理解
  • Python 小爬虫:爬取 bing 每日壁纸设为桌面壁纸
  • 最新WordPress网址导航设计师主题风格网站源码
  • 基于vue实现bilibili网页
  • Java面试题总结15之简述你对RPC,RMI的理解
  • 如何用 UDP 实现可靠传输?并以LabVIEW为例进行说明
  • springboot277流浪动物管理系统
  • python 直方图
  • js基础语法大全(时间戳,uuid,字符串转json)
  • 大模型—概念
  • 从零开始学HCIA之SDN04
  • HTML_CSS练习:HTML注释
  • 掘根宝典之C++RTTI和类型转换运算符
  • 【通信原理笔记】【二】随机信号分析——2.4 复随机过程
  • 提升地理空间分析效率,火山引擎ByteHouse上线GIS能力
  • 基于正点原子潘多拉STM32L496开发板的简易示波器
  • 【Unity】Transform、Rigidbody、CharacterController移动
  • Linux:搭建ntp服务器
  • Python面试笔记
  • Vue.js+SpringBoot开发食品生产管理系统