解决方案

Milvus检索数据库安装和使用(一)

seo靠我 2023-09-26 03:29:37

Milvus基本概念(类比mysql等关系数据库):

数据库: default 表: collection 表结构: CollectionSchema 一SEO靠我条数据: entitie

如需安装Milvus,见下面第二点

1 python 操作Milvus

1.1 Milvus 连接

安装pymilvus包

pip install PyMilvus==2.2.11连接SEO靠我milvus数据库,选择数据库名称(默认default),输入ip和端口 from pymilvus import ( connections, utiSEO靠我lity, FieldSchema, CollectionSchema, DataType, Collection, )SEO靠我 # 使用默认数据库 ‘default’,也可以自己建数据库 connections.connect("default", host="localhost", portSEO靠我="19530")

1.2 创建集合(数据库中的表)

创建Collection(表),需要先定义好表结构(即filelds)

①下面代码先建一个表结构,再封装为一个schema

② 再使用CollectionSEO靠我建一个名为”hello_milvus“的集合表fields = [ FieldSchema(name="pk", dtype=DataType.INT64, is_primary=TrSEO靠我ue, auto_id=False), FieldSchema(name="random", dtype=DataType.DOUBLE), FieldSchema(nSEO靠我ame="embeddings", dtype=DataType.FLOAT_VECTOR, dim=8) ] schema = CollectionSchema(fiSEO靠我elds, "hello_milvus is the simplest demo to introduce the APIs") hello_milvus = Collection("SEO靠我hello_milvus", schema)

1.3 数据插入

下面的entities 就一条数据,与上面的表结构相对应。

若上面表结构设置import random entities = SEO靠我[ [i for i in range(3000)], # field pk [float(random.randrange(-20, -10)) for _ in rSEO靠我ange(3000)], # field random [[random.random() for _ in range(8)] for _ in range(3000)], # fiSEO靠我eld embeddings ] insert_result = hello_milvus.insert(entities) hello_milvus.SEO靠我flush()

1.4 构建索引

只有使用索引,向量检索时才快,不然会使用暴力搜索方式。

索引选择可以参考 https://milvus.io/docs/index.mdindex = { SEO靠我"index_type": "IVF_FLAT", "metric_type": "L2", "params": {"nlist": 128}, } SEO靠我 hello_milvus.create_index("embeddings", index)

1.5 向量检索

普通查找

直接在collection全量向量中进行查找Top3 SEO靠我 hello_milvus.load() vectors_to_search =[[random.random() for _ in range(8)]] SEO靠我 search_params = { "metric_type": "L2", "params": {"nprobe": 10}, SEO靠我 } result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limSEO靠我it=3, output_fields=["random"]) 带条件查找

如下查找指定条件下的向量,如下代码为在random值大于-12的向量中进行检索查找Top3. SEO靠我 result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, expr="raSEO靠我ndom > -12", output_fields=["random"]) 查找结果分析 for hits in result: for hit SEO靠我in hits: print(f"hit: {hit}, random field: {hit.entity.get(random)}") hit: (distancSEO靠我e: 0.07080483436584473, id: 2060), random field: -12.0 hit: (distance: 0.0729561522603035, iSEO靠我d: 1647), random field: 15.0 hit: (distance: 0.08006095886230469, id: 2530), random field: -SEO靠我15.0 search latency = 0.0080s

1.6 删除指定entities 数据

若需要删除表中数据,可以指定删除条件,

下面代码表示删除第一个,和第二个数据expr = SEO靠我f"pk in [{entities[0]}, {entities[1]}]" hello_milvus.delete(expr)

1.7 删掉数据库中表

如需要删除数据库中的表,使用以下SEO靠我命令:

utility.drop_collection("hello_milvus")

2 安装

使用docker安装standalone 模式Milvus集群

step1:下载docker 编排文件 SEO靠我 wget https://github.com/milvus-io/milvus/releases/download/v2.2.11/milvus-standalone-docker-comSEO靠我pose.yml -O docker-compose.yml step2: 启动docker 文件(第一次会下载所需的docker镜像,比较慢) sudo dockeSEO靠我r-compose up -d step3 :检查docker 容器是否启动,和启动的端口(默认是19530) sudo docker-compose ps SEO靠我 docker port milvus-standalone 19530/tcp step4: 停止Milvus 集群(可选) sudo docker-compSEO靠我ose down
“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2