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()
  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
功能设计 ​ 系统功能模块较为简单,主要功能就是**新增人脸**和**人脸搜索**两个功能,其中新增人脸使用页面上传和压缩包批量上传两个方式,压缩包上传时文件名称为用户名,下面主要说明人脸搜索的功能流程 ##### Milvues ​ 在介绍前需要说明一下Mulvus ​ Milvus 向量数据库能够帮助用户轻松应对海量非结构化数据(图片 / 视频 / 语音 / 文本)检索。单节点 Milvus 可以在秒内完成十亿级的向量搜索 ​ 因此虹软的SDK只能提取向量及对比的功能,在大规模人脸识别中,需要搜索引擎对于人脸数据进行初步筛选到一个较小的范围后在利用虹软的SDK进行测试,值得一提的是,博主多次测试后Milvues返回的匹配率足以满足人脸匹配的要求,Milvus的安装部署和使用文档参考 https://milvus.io/cn/docs/v2.0.x ​ **特别说明的是**虹软提取的数组是一个经过归一后的1032长度的byte数组,我们需要对数组进行转换,去除前8位的版本号,并将1024长度的byte转为256长度的float向量,这部分可以利用Arrays提供的方法进行转换,代码中也有相应的工具类 ##### 人脸上传(单张) ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值