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

milvus数据库搜索

一、向量相似度搜索
在Milvus中进行向量相似度搜索时,会计算查询向量和集合中具有指定相似性度量的向量之间的距离,并返回最相似的结果。通过指定一个布尔表达式来过滤标量字段或主键字段,您可以执行混合搜索。

1.加载集合
执行操作的前提是集合加载到内存。

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

2.准备搜索参数
搜索参数要适应你的搜索场景。

search_params = {"metric_type": "L2", "offset": 0, "ignore_growing": False, "params": {"nprobe": 10}#适合 IVF_FLAT index
}

params的可选参数和值如下:

nprobe Indicates the number of cluster units to search. This parameter is available only when index_type is set to IVF_FLAT, IVF_SQ8, or IVF_PQ. The value should be less than nlist specified for the index-building process.

ef Indicates the search scope. This parameter is available only when index_type is set to HNSW. The value should be within the range from top_k to 32768.

radius Indicates the angle where the vector with the least similarity resides.

range_filter Indicates the filter used to filter vector field values whose similarity to the query vector falls into a specific range.

3.进行向量搜索

# 使用集合对象的 search 方法来进行向量检索
results = collection.search(data=[[0.1, 0.2]],  # 查询向量anns_field="book_intro",  # 指定用于检索的字段param=search_params,  # 检索参数limit=10,  # 返回结果数量的限制expr=None,  # 查询表达式output_fields=['title'],  # 指定要从搜索结果中检索的字段consistency_level="Strong"  # 一致性级别
)# 获取搜索结果中最相似的文档 IDs
results[0].ids# 获取搜索结果中的距离值
results[0].distances# 获取第一个匹配的文档
hit = results[0][0]# 从匹配的文档中获取 'title' 字段的值
hit.entity.get('title')

二、混合搜索

混合搜索是使用属性过滤的向量搜索。通过指定过滤标量字段或主键字段的布尔表达式,来先限定搜索范围。
1.加载集合
2.进行混合向量搜索
其实也就是在前面的搜索配置加了个布尔表达式

search_param = {"data": [[0.1, 0.2]],"anns_field": "book_intro","param": {"metric_type": "L2", "params": {"nprobe": 10}, "offset": 0},"limit": 10,"expr": "word_count <= 11000",
}
res = collection.search(**search_param)

3.检查搜索结果

assert len(res) == 1 # 断言
hits = res[0]
assert len(hits) == 2
print(f"- Total hits: {len(hits)}, hits ids: {hits.ids} ")
print(f"- Top1 hit id: {hits[0].id}, distance: {hits[0].distance}, score: {hits[0].score} ")

三、范围搜索
1.加载集合
2.定义范围搜索参数
l2度量:

param = {# use `L2` as the metric to calculate the distance"metric_type": "L2","params": {# search for vectors with a distance smaller than 1.0"radius": 1.0,# 半径 只有距离查询向量的距离小于半径值的向量才会被返回作为检索结果。# filter out vectors with a distance smaller than or equal to 0.8"range_filter" : 0.8 #大于或等于指定值的向量将被返回作为检索结果}
}

内积ip度量:

param = {# use `IP` as the metric to calculate the distance"metric_type": "IP","params": {# search for vectors with a distance greater than 0.8"radius": 0.8,# filter out most similar vectors with a distance greater than or equal to 1.0"range_filter" : 1.0}
}

3.执行范围搜索

res = collection.search(data=[[0.3785311281681061,0.2960498034954071]], # query vectoranns_field='book_intro', # vector field nameparam=param, # search parameters defined in step 2limit=5 # number of results to return
)print(res)
http://www.lryc.cn/news/237720.html

相关文章:

  • HEVC参考帧技术
  • QT小记:The QColor ctor taking ints is cheaper than the one taking string literals
  • 机器人走迷宫问题
  • 轻量封装WebGPU渲染系统示例<36>- 广告板(Billboard)(WGSL源码)
  • Java 多线程进阶
  • CentOS上搭建SVN并自动同步至web目录
  • .Net中Redis的基本使用
  • 使用cli批量下载GitHub仓库中所有的release
  • 深入分析TaskView源码之触摸相关
  • 键盘快捷键工具Keyboard Maestro mac中文版介绍
  • Dubbo开发系列
  • 周赛372(正难则反、枚举+贪心、异或位运算、离线+单调栈)
  • 存储区域网络(SAN)之FC-SAN和IP-SAN的比较
  • Leetcode_45:跳跃游戏 II
  • 给新手教师的成长建议
  • 新手教师如何迅速成长
  • 竞赛选题 深度学习验证码识别 - 机器视觉 python opencv
  • 提升工作效率,使用AnyTXT Searcher实现远程办公速查公司电脑文件——“cpolar内网穿透”
  • mybatis使用foreach标签实现union集合操作
  • 请问DasViewer是否支持与业务系统集成,将业务的动态的数据实时的展示到三维模型上?
  • [ruby on rails]rack-cors, rack-attack
  • 猫12分类:使用多线程爬取图片的Python程序
  • 《深度学习500问》外链笔记
  • 机器学习技术栈—— 概率学基础
  • 使用Redis实现分布式锁
  • linux 服务器进程、端口查找,nginx 配置日志查找,lsof 命令详解
  • 汽车标定技术--A2L格式分析
  • Linux操作系统使用及C高级编程-D9D10Linux 服务搭建与使用
  • git下载安装配置及Git在Gitee上拉取和上传代码教程
  • ospf路由选路及路由汇总