pymilvus执行多向量搜索

news/2024/9/23 9:31:24/

pymilvus执行多向量搜索

从 Milvus 2.4 开始,引入了多向量支持和混合搜索框架,单个collection可以支持10个向量字段。不同的向量字段可以表示不同的方面、不同的embedding模型甚至表征同一实体的不同数据模态。该功能在综合搜索场景中特别有用,例如根据图片、语音、指纹等各种属性来识别向量库中最相似的人。

多向量搜索支持在多个向量字段上执行搜索请求,并使用重排名策略(例如RRF和加权评分)组合结果。

客户端pymilvus需要2.4版本。

准备数据

集合hello_milvus有2个向量字段embeddings1、embeddings2

创建多个 AnnSearchRequest 实例

每个AnnSearchRequest代表指定向量字段上的单个搜索请求。

以下示例创建两个AnnSearchRequest实例对两个向量字段执行单独的相似性搜索。

query_vector1 = [[0.9425935745239258,0.7893211245536804,0.6682707071304321,0.6769697070121765,0.9508556127548218]]search_param_1 = {"data": query_vector1, # Query vector"anns_field": "embeddings1", # Vector field name"param": {"metric_type": "L2", # This parameter value must be identical to the one used in the collection schema"params": {"nprobe": 10}},"limit": 2 # Number of search results to return in this AnnSearchRequest
}
request_1 = AnnSearchRequest(**search_param_1)query_vector2 = [[0.7958434224128723,0.18576304614543915,0.650543212890625,0.3026141822338104,0.7158203125]]
search_param_2 = {"data": query_vector2, # Query vector"anns_field": "embeddings2", # Vector field name"param": {"metric_type": "L2", # This parameter value must be identical to the one used in the collection schema"params": {"nprobe": 10}},"limit": 2 # Number of search results to return in this AnnSearchRequest
}
request_2 = AnnSearchRequest(**search_param_2)reqs = [request_1, request_2]

配置重排名策略

创建AnnSearchRequest实例后,配置重排名策略以组合结果并重新排名。目前有两个选项:WeightedRanker和RRFRanker。

from pymilvus import WeightedRanker
rerank = WeightedRanker(0.8, 0.2)

执行混合搜索

使用hybrid_search()方法执行多向量搜索。

from pymilvus import (connections,Collection,AnnSearchRequest,WeightedRanker
)collection_name = "hello_milvus"
host = "192.168.230.71"
port = 19530
username = ""
password = ""query_vector1 = [[0.9425935745239258,0.7893211245536804,0.6682707071304321,0.6769697070121765,0.9508556127548218]]search_param_1 = {"data": query_vector1, # Query vector"anns_field": "embeddings1", # Vector field name"param": {"metric_type": "L2", # This parameter value must be identical to the one used in the collection schema"params": {"nprobe": 10}},"limit": 2 # Number of search results to return in this AnnSearchRequest
}
request_1 = AnnSearchRequest(**search_param_1)query_vector2 = [[0.7958434224128723,0.18576304614543915,0.650543212890625,0.3026141822338104,0.7158203125]]
search_param_2 = {"data": query_vector2, # Query vector"anns_field": "embeddings2", # Vector field name"param": {"metric_type": "L2", # This parameter value must be identical to the one used in the collection schema"params": {"nprobe": 10}},"limit": 2 # Number of search results to return in this AnnSearchRequest
}
request_2 = AnnSearchRequest(**search_param_2)reqs = [request_1, request_2]rerank = WeightedRanker(0.8, 0.2)print("start connecting to Milvus")
connections.connect("default", host=host, port=port,user=username,password=password)
coll = Collection(collection_name, consistency_level="Bounded")res = coll.hybrid_search(reqs, # List of AnnSearchRequests created in step 1rerank, # Reranking strategy specified in step 2output_fields=['pk'],limit=2 # Number of final search results to return
)print(res)

返回结果:

['[
"id: 0, distance: 1.0, entity: {'pk': 0}", 
"id: 568, distance: 0.7705678939819336, entity: {'pk': 568}"
]']

http://www.ppmy.cn/news/1442181.html

相关文章

ElasticSearch自动补全

一、拼音分词器: 当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项,如图: 这种根据用户输入的字母,提示完整词条的功能,就是自动补全了。 GET /_analyze {"text":"我爱螺蛳粉…

Java try catch 应该在 for 循环里面还是外面?(面试)

时间上&#xff0c; 其实算是无差别。内存上&#xff0c; 如果没出异常&#xff0c;其实也是无差别。 但是如果出现了异常&#xff0c; 那就要注意了。 一、try catch 在 for 循环外面 public static void tryOutside() { try { for (int count 1; count < 5; count) …

kotlin 编写一个简单的天气预报app (七)使用material design

一、优化思路 对之前的天气预报的app进行了优化&#xff0c;原先的天气预报程序逻辑是这样的。 使用text和button组合了一个输入城市&#xff0c;并请求openweathermap对应数据&#xff0c;并显示的功能。 但是搜索城市的时候&#xff0c;可能会有错误&#xff0c;比如大小写…

代码随想录算法训练营第三十七天| LeetCode738.单调递增的数字

LeetCode 738 单调递增的数字 题目链接&#xff1a;738. 单调递增的数字 - 力扣&#xff08;LeetCode&#xff09; 【解题思路】 需要采用从后往前的遍历 如果发现该数字的前一位比后一位大&#xff0c;那么前一位就做-1处理&#xff0c;后一位变为9 注意&#xff1a;千万不…

Axure RP 9中文激活版:专业原型设计工具mac/win

Axure RP 9是一款由美国Axure Software Solution公司开发的专业原型设计工具。它凭借强大的交互功能和丰富的设计素材&#xff0c;为产品经理、UI设计师、交互设计师等用户提供了高效、便捷的原型设计体验。 Axure RP 9支持快速创建线框图、流程图、原型和规格说明文档&#xf…

自动化立体库安全使用管理制度

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 完整版文件和更多学习资料&#xff0c;请球友到知识星球 【智能仓储物流技术研习社】自行下载 关于自动化立体库安…

【Redis 开发】(长篇学习)掌握Redis的用法,各种客户端下的操作

Redis 前言RedisRedis的安装Redis启动Redis客户端 Redis常见命令Redis的java客户端jedis学习简单的jedis 入门流程Jedis连接池 SpringDataRedisSpringDataRedis快速入门 前言 我们在作者之前的文章: 快速掌握Redis安装与基本语法的基础上进行系统的学习&#xff0c;学习自黑马…

3.车载网络诊断测试用例标准与示例(车载网络诊断测试平台)

文章目录 1.概述2.测试用例2.1 用例名字2.2 用例ID2.3 测试需求来源2.4 测试环境2.5 测试目的2.6 前提条件2.7 手动/自动2.8 测试步骤2.9 评价标准2.10 备注2.11 测试结果2.12 测试数据3.测试用例示例4.其他1.概述