milvus安装

官网教程:https://www.milvus.io/cn/docs/install_milvus.md

我是在win10下安装的docker版,先安装docker,百度点点点即可,配置环境时需要内存8G往上;
再在docker上找到镜像pull下来

docker pull milvusdb/milvus:cpu-latest

完成后运行

docker run -it -p 19530:19530 -d milvusdb/milvus:cpu-latest

查看一下是否在运行了,ok了就可以开始玩耍了

docker ps

本地的python需要先安装pymilvus

pip install pymilvus

基础操作

连接milvus

port对应容器运行时设置的

from milvus import Milvus, IndexType, MetricType
milvus = Milvus(host='localhost', port='19530')

建立/删除collection

collection相当于一个数据库中的表
index_file_size:缓存大小,默认1024M
metric_type:距离的计算方式,L2为欧氏距离;此外还有Jaccard相似系数:MetricType.JACCARD,汉明距离:MetricType.HAMMING等等,可以在MetricType下找找其他的。

vec_dim = 998#向量的维度
num_vec=9999 #向量数量10000,后面还加入了一条和查询向量一样的做验证
param = {'collection_name':'test01', 'dimension':vec_dim, 'index_file_size':1024, 'metric_type':MetricType.L2}
milvus.create_collection(param)
#像数据库一样为表test01建立分区tag01
milvus.create_partition('test01', 'tag01')
milvus.drop_collection('test01')

建立索引

不写的话默认方式为IndexType.FLAT只能精确查找,速度会慢些;
IVF_FLAT的意思是先进行聚类,nlist控制聚类簇数,查询的时候先与各个簇中心进行计算距离,选近的n个再进行簇内查询。

ivf_param = {'nlist': 16}
milvus.create_index('test01', IndexType.IVF_FLAT, ivf_param)

插入向量

插入的向量形式需要是list;
单次插入的数据量不能大于 256 MB,插入后存在缓存区,缓存区大小由参数index_file_size决定,默认1024M

vectors_array = np.random.rand(num_vec,vec_dim)
vectors_list = vectors_array.tolist()
vectors_list.append([1 for _ in range(vec_dim)])
milvus.insert(collection_name='test01', records=vectors_list, partition_tag="tag01")

此时查看collection已经有了

print(milvus.list_collections())

但是直接去查询,可能会出来空值,因为数据还在缓存区,需要手动将它落盘

milvus.flush(collection_name_array=['test01'])

查询

nprobe:表示查询的簇的数量,就是查询最近的nprobe个簇内的所有数据

query_vec_list = [[1 for _ in range(vec_dim)]]
search_param = {'nprobe': 10}
results = milvus.search(collection_name='test01', query_records=query_vec_list, top_k=10,params=search_param)

完整代码

# -*- coding: utf-8 -*-
#docker run  -it -p 19530:19530 -d milvusdb/milvus:cpu-latest
#导入相应的包
import numpy as np
from milvus import Milvus, IndexType, MetricType
import timet1 = time.time()
# 初始化一个Milvus类,以后所有的操作都是通过milvus来的
milvus = Milvus(host='localhost', port='19530')
vec_dim = 1000 #向量的维度
num_vec=9999 #向量数量10000,后面还加入了一条和查询向量一样的做验证
#删除collection
milvus.drop_collection('test01')
#创建collection
param = {'collection_name':'test01', 'dimension':vec_dim, 'index_file_size':1024, 'metric_type':MetricType.L2}
milvus.create_collection(param)
#建立分区
milvus.create_partition('test01', 'tag01')#nlist聚类为多少簇
ivf_param = {'nlist': 16}
milvus.create_index('test01', IndexType.IVF_FLAT, ivf_param) #可以不写这个,默认方式IndexType.FLAT
# 随机生成一批向量数据
vectors_array = np.random.rand(num_vec,vec_dim)
vectors_list = vectors_array.tolist()
vectors_list.append([1 for _ in range(vec_dim)])
#单次插入的数据量不能大于 256 MB,插入后存在缓存区,缓存区大小由参数index_file_size决定,默认1024M
milvus.insert(collection_name='test01', records=vectors_list, partition_tag="tag01")
#一些信息
print(milvus.list_collections())
print(milvus.get_collection_info('test01'))
t2 = time.time()
print("create cost:",t2-t1)
# # 创建查询向量
query_vec_list = [[1 for _ in range(vec_dim)]]
# 进行查询, 注意这里的参数nprobe和建立索引时的参数nlist 会因为索引类型不同而影响到查询性能和查询准确率
#IVF_FLAT下查询多少个簇,不能超过nlist
search_param = {'nprobe': 10}
#现在数据还在内存,需要数据落盘,保存到数据库中去,不然查不到数据
milvus.flush(collection_name_array=['test01'])
results = milvus.search(collection_name='test01', query_records=query_vec_list, top_k=10,params=search_param)
print(results)
print("search cost:",time.time()-t2)

pymilvus基操相关推荐

  1. ThinkPHP6项目基操(15.实战部分 阿里云短信redis)

    阿里云短信redis 一.安装阿里云短信SDK 二.封装到项目lib中 三.radis记录验证码 1. 安装redis服务 2. 可视化redis管理软件 3. PHP安装redis扩展 4. 配置缓 ...

  2. 面试基操:MQ怎么保障消息可靠性?

    面试官:在MQ的整个消息生产消费过程中,如何保障消息100%被消费? 候选人:MQ有个ACK机制,确保消息100%被消费. 面试官:好吧,可以回去等通知了-- 这道面试题在考察MQ组件时算是老生常谈了 ...

  3. itextpdf添加表格元素_基操勿6第四期:PPT表格美化

    大家好,这里是"基操勿6"的第四期内容,我是阿远. 原本按我的计划是要先把PPT里面一些大家可能不太清楚,但是却很好用的操作先给大家做一遍分享.希望大家用到的时候,可以在同事震惊的 ...

  4. ThinkPHP6项目基操目录

    前言 ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色 ...

  5. Linux基操 笔记

    Linux基操 常用命令 vim命令 进入目录 查看目录文件 查找文件 移动文件 复制文件 删除文件 解压文件到指定目录 压缩文件 linux安装jdk1.8 1.官网下载 2.root用户下 3.配 ...

  6. 2021-09-03 Elasticsearch基操

    Elasticsearch 基操 一.Elasticsearch介绍 二.curl 基本操作 三.es 可视化工具 一.Elasticsearch介绍 二.curl 基本操作 参考:使用curl操作 ...

  7. 【数据结构】线性表之单向链表的八大基操

    线性表可以采用顺序存储结构(依赖于数组)和链式存储结构(依赖于指针) 下面是单向链表有着八大基本操作(简称八大基操) SLinkNode.cpp: #include <stdlib.h> ...

  8. C++ 对文件的最常用基操之对 ASCII 文件(文本文件、字符文件)的操作

    C++ 对文件的最常用操作 ☆ 基本概念 根据文件中数据的组织方式,可以将文件分为 ASCII 文件 和 二进制文件. 前者又称为文本文件或字符文件,后者又称为内部格式文件或字节文件. 本文讲解针对 ...

  9. elasticdump工具安装及基操

    elasticdump工具安装及基操 1.下载nodeJs 下载该插件需要有 nodejs 的 npm 没有请先下载nodejs 网址:https://nodejs.org/en/download/ ...

最新文章

  1. 关于我的51CTO博客
  2. c语言结构体介绍及用法
  3. Yii的查询搜索函数find findAll findOne:find就是返回结果 findone就是返回一条数据 findall就是返回所有数据
  4. 计算数字的出现次数 java_关于Java:如何计算数字在.txt文件中出现的次数
  5. C# MVC的博客开发(二)登录
  6. Linux文件(目录)命名规则
  7. 一步一步SharePoint 2007之十五:实现Form认证(5)——更改认证的Provider
  8. Java虚拟机学习总结(1)——JVM内存模型
  9. list -- set方法——替换列表中指定位置的元素
  10. oracle取字段第三位字符,oracle截取字符串(截取某个字符前面的字符串)
  11. C++ 调用 SOAP Web Service
  12. W5500+STM32F103C8T6进行TCP通信(modbus)
  13. 关于JS跨域访问简述
  14. 通讯:春运中的墨西哥“乘务员”
  15. 高中生参加的计算机奥赛是,高中生可参加哪些含金量较高的赛事?报名流程指南来了!...
  16. ETL KETTLE 读取csv文件写入数据库
  17. HTML5游戏开发实战
  18. MATLAB 中nargin函数
  19. 小白都能看懂!Python机器学习预测乳腺癌疾病案例剖析!
  20. 网站被百度K了怎么办

热门文章

  1. LabVIEW FPGA PCIe开发讲解-7.1节:FPGA PCIe/PXIe基础知识和概念概述
  2. 用Java写一个简易五子棋游戏
  3. 人工智能/数据科学比赛汇总 2019.6
  4. 病例演讲比赛PPT模板
  5. setStyle 方法封装
  6. 卷积神经网络CNN——使用keras识别猫咪
  7. android app 按键精灵,安卓按键精灵的,关闭app程序问题!
  8. mac下安装破解版adobe photoshop cs6
  9. 如何用Python挖掘“啤酒和尿布”的关系?(Apriori算法挖掘关联规则)
  10. 天梵古法健康知识普及:手少阴心经经穴