要使用Python和Milvus向量数据库进行查询,我们首先需要安装Milvus客户端库。然而,由于你要求不使用任何包安装工具,我将假设Milvus客户端库已经安装好了。以下是一个简单的Python脚本,它展示了如何使用Milvus向量数据库进行三种类型的

摘要:Milvus 三种核心查询方式:getquery迭代器 在向量数据库的实际应用中,查询功能是衔接数据存储与业务落地的核心环节。Milvus 作为主流向量数据库,针对不同业务场景设计了多种灵活的查询方式,其中 get 主键查询、query
Milvus 三种核心查询方式:get/query/迭代器 在向量数据库的实际应用中,查询功能是衔接数据存储与业务落地的核心环节。Milvus 作为主流向量数据库,针对不同业务场景设计了多种灵活的查询方式,其中 get 主键查询、query 条件过滤查询、query_iterator 迭代器查询是最常用的三种,掌握它们的使用场景与核心逻辑,能大幅提升数据查询效率与开发体验。本文将结合实际应用场景,详细拆解这三种查询方式的区别与使用技巧,帮助开发者快速上手。 在正式讲解查询方式前,先简单梳理下前置准备工作。我们需先建立 Milvus 客户端连接,定义集合结构,包含主键、向量字段及属性字段,插入测试数据后为向量字段创建索引,确保查询性能。完成基础环境搭建后,即可根据实际业务需求,选择合适的查询方式。 一、get 主键查询:精准定位,高效快捷 get 查询是 Milvus 中最基础、最高效的查询方式,核心作用是通过主键 ID 精准定位单条或多条数据,相当于“按身份证找数据”,适用于已知主键、需要快速获取对应完整数据的场景。 其核心优势在于“精准”与“高效”——由于主键具有唯一性,Milvus 会直接通过主键索引定位数据,无需遍历整个集合,查询速度极快,尤其适合高频次、精准化的数据查询场景,比如根据用户 ID 查询对应向量特征、根据商品 ID 获取商品向量及属性信息等。 使用时只需指定目标集合名称、待查询的主键 ID 列表,以及需要返回的字段(如向量、属性字段),即可快速获取对应数据,操作简洁且返回结果精准,无需复杂的条件筛选,是日常开发中最常用的“精准查询工具”。 二、query 条件过滤查询:灵活筛选,按需匹配 与 get 查询的“精准定位”不同,query 查询主打“条件过滤”,核心作用是根据自定义的属性条件,筛选出符合要求的所有数据,相当于“按筛选条件找数据”,适用于未知主键、需要根据属性特征筛选数据的场景。 其核心优势在于“灵活性”——支持多种条件筛选语法,比如模糊匹配、范围查询、多条件组合等,能够精准匹配业务中的复杂筛选需求。例如,筛选出属性中包含特定关键词的数据、筛选出符合某个数值范围的向量数据,同时还能指定返回字段和查询条数限制,兼顾灵活性与可控性。 这种查询方式常用于业务场景中的数据筛选,比如在图像检索中,筛选出特定颜色标签的图像向量;在用户画像分析中,筛选出符合特定特征的用户向量,满足多样化的业务查询需求。需要注意的是,使用前需确保集合已加载,否则会出现集合找不到的错误,影响查询正常执行。 三、query_iterator 迭代器查询:分批获取,高效处理海量数据 迭代器查询(query_iterator)是针对海量数据场景设计的查询方式,核心作用是将查询结果分批返回,而非一次性加载所有数据,相当于“分批读取数据”,适用于数据量较大、一次性加载会占用大量内存的场景。 其核心优势在于“低内存占用”与“可操作性”——当查询结果条数较多时,一次性返回所有数据会消耗大量内存,甚至导致程序卡顿,而迭代器查询可以设置分批大小,每次只返回少量数据,处理完一批后再获取下一批,有效降低内存压力。同时,迭代器支持循环读取,可灵活控制数据处理节奏,便于对查询结果进行逐批处理、分析或存储。 使用时需先建立集合连接,指定分批大小、筛选条件及返回字段,通过循环迭代的方式逐批获取数据,处理完成后关闭迭代器,避免资源浪费。这种查询方式常用于海量数据的批量处理场景,比如批量导出符合条件的向量数据、逐批分析海量用户的向量特征等,兼顾查询效率与系统稳定性。 四、三种查询方式核心对比与使用建议 为了帮助大家快速区分三种查询方式,这里整理了核心差异与适用场景,方便大家根据业务需求快速选择: 1. get 主键查询:精准、高效,适用于已知主键、需快速获取数据的场景,优先用于高频精准查询; 2. query 条件过滤查询:灵活、可控,适用于未知主键、需按属性条件筛选数据的场景,满足复杂筛选需求; 3. query_iterator 迭代器查询:低内存、可分批,适用于海量数据查询,避免一次性加载占用过多资源。 总结来说,三种查询方式各有侧重,无优劣之分,关键在于匹配业务场景。日常开发中,可根据是否已知主键、数据量大小、筛选需求等,选择合适的查询方式,既能提升查询效率,也能降低系统资源消耗。掌握这三种核心查询方式,就能轻松应对 Milvus 大部分数据查询场景,为向量数据库相关开发提供有力支撑。 代码: from pymilvus import MilvusClient,DataType, Collection,connections client = MilvusClient( uri="http://192.168.211.128:19530", token="root:Milvus" ) #准备数据环境 #删除集合 client.drop_collection( collection_name="data_t" ) #Create schema schema = MilvusClient.create_schema( auto_id=False, enable_dynamic_field=True, ) #Add fields to schema schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True) schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=5) schema.add_field(field_name="color", datatype=DataType.VARCHAR, max_length=512) #创建 Collections client.create_collection( collection_name="data_t", schema=schema ) data = [ {"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"}, {"id": 1, "vector": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], "color": "red_7025"}, {"id": 2, "vector": [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, 0.7894058910881185, 0.20785793220625592], "color": "orange_6781"}, {"id": 3, "vector": [0.3172005263489739, 0.9719044792798428, -0.36981146090600725, -0.4860894583077995, 0.95791889146345], "color": "pink_9298"}, {"id": 4, "vector": [0.4452349528804562, -0.8757026943054742, 0.8220779437047674, 0.46406290649483184, 0.30337481143159106], "color": "red_4794"}, {"id": 5, "vector": [0.985825131989184, -0.8144651566660419, 0.6299267002202009, 0.1206906911183383, -0.1446277761879955], "color": "yellow_4222"}, {"id": 6, "vector": [0.8371977790571115, -0.015764369584852833, -0.31062937026679327, -0.562666951622192, -0.8984947637863987], "color": "red_9392"}, {"id": 7, "vector": [-0.33445148015177995, -0.2567135004164067, 0.8987539745369246, 0.9402995886420709, 0.5378064918413052], "color": "grey_8510"}, {"id": 8, "vector": [0.39524717779832685, 0.4000257286739164, -0.5890507376891594, -0.8650502298996872, -0.6140360785406336], "color": "white_9381"}, {"id": 9, "vector": [0.5718280481994695, 0.24070317428066512, -0.3737913482606834, -0.06726932177492717, -0.6980531615588608], "color": "purple_4976"}, ] #插入数据 res = client.insert( collection_name="data_t", data=data ) print(res) # Set up the index parameters index_params = MilvusClient.prepare_index_params() # Add an index on the vector field. index_params.add_index( field_name="vector", metric_type="COSINE", index_type="IVF_FLAT", index_name="vector_index", params={ "nlist": 128 } ) # Create an index file client.create_index( collection_name="data_t", index_params=index_params, sync=False # Whether to wait for index creation to complete before returning. Defaults to True. ) # 5. Describe index res = client.list_indexes( collection_name="data_t" ) # Set up index parameters for querying 没有这句会报 集合找不到的错误 client.load_collection(collection_name="data_t") print(res) print('主键 get 查询数据') res = client.get( collection_name="data_t", ids=[0, 1, 2], output_fields=["vector", "color"] ) print(res) print('--------------') print('query 查询数据') res = client.query( collection_name="data_t", filter="color like \"red%\"", output_fields=["vector", "color"], limit=3 ) print(res) print('--------------') print('迭代器查询') connections.connect("default", host='172.25.131.110', port='19530') collection = Collection("data_t") iterator = collection.query_iterator( batch_size=2, expr="color like \"red%\"", output_fields=["color"] ) results = [] while True: print('*************') result = iterator.next() if not result: iterator.close() break print(result) 结果输出: {'insert_count': 10, 'ids': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]} ['vector_index'] 主键 get 查询数据 data: ["{'vector': [0.35803765, -0.6023496, 0.18414013, -0.26286206, 0.90294385], 'color': 'pink_8682', 'id': 0}", "{'vector': [0.19886813, 0.060235605, 0.6976963, 0.26144746, 0.8387295], 'color': 'red_7025', 'id': 1}", "{'vector': [0.43742132, -0.55975026, 0.6457888, 0.7894059, 0.20785794], 'color': 'orange_6781', 'id': 2}"] -------------- query 查询数据 data: ["{'color': 'red_7025', 'id': 1, 'vector': [0.19886813, 0.060235605, 0.6976963, 0.26144746, 0.8387295]}", "{'color': 'red_4794', 'id': 4, 'vector': [0.44523495, -0.8757027, 0.82207793, 0.4640629, 0.3033748]}", "{'color': 'red_9392', 'id': 6, 'vector': [0.8371978, -0.015764369, -0.31062937, -0.56266695, -0.8984948]}"] -------------- 迭代器查询 ************* [{'color': 'red_7025', 'id': 1}, {'color': 'red_4794', 'id': 4}] ************* [{'color': 'red_9392', 'id': 6}] ************* 更多学习资料尽在老虎网盘资源 老虎网盘资源