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

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 vector
    anns_field='book_intro', # vector field name
    param=param, # search parameters defined in step 2
    limit=5 # number of results to return
)

print(res)

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

相关文章:

  • 财会〔2024〕22号发布,全面提高管理会计数字化、智能化水平,泛微·齐业成来助力
  • Oracle中间件 SOA之 OSB 12C服务器环境搭建
  • mapStateToProps
  • tslib(触摸屏输入设备的轻量级库)的学习、编译及测试记录
  • 智慧商城:购物车模块基本静态结构 + 构建vuex cart模块,获取数据存储(异步actions)
  • TCL发布万象分区,再造Mini LED技术天花板
  • 隐私计算迎来千亿级风口,一文讲清它的技术理论基础
  • STM32 -Bin/Hex文件格式解析
  • 【excel技巧】单元格内的公式如何隐藏?
  • APP分发平台指的是将开发完成的应用程序
  • 数据仓库相关
  • 适合学校或高校老师、学生学习用的网盘推荐
  • Modbus TCP/RTU协议转PROFINET协议网关
  • 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵
  • 碳中和领域研究,细谈新能源“爆发”的原因之一
  • centos安装指定版本docker
  • 面试官:如何实现微服务全链路灰度发布?
  • Element UI 禁用数字输入框组件添加鼠标滚动事件
  • 数据处理生产环境_获取当前日期的前一天日期
  • I.MX6ULL开发笔记(一)——环境搭建、镜像烧录、网络连接
  • Qt如何解析JSON格式
  • SAP smartform和ALV如何使用图片 如何下载SE78上传的图片到本地
  • 解析紫光展锐T820 5G芯片——让照片接近原色
  • 【自动驾驶解决方案】C++取整与保留小数位
  • CentOS部署Skywalking
  • 浅谈电动汽车充电桩设计与应用研究