向量数据库:Milvus

特性

Milvus由Go(63.4%),Python(17.0%),C++(16.6%),Shell(1.3%)等语言开发开发,支持python,go,java接口(C++,Rust,c#等语言还在开发中),支持单机、集群部署,支持CPU、GPU运算。Milvus 中的所有搜索和查询操作都在内存中执行。,当前支持的Dimensions of a vector的最大值为32,768其他限制

使用步骤:

M i l v u s 和之前讨论的 f a i s s , u s e a r c h 的不同在于,使用前需要先安装服务端的 M i l v u s ,否则会有以下错误: \color{red} Milvus和之前讨论的faiss,usearch的不同在于,使用前需要先安装服务端的Milvus,否则会有以下错误: Milvus和之前讨论的faiss,usearch的不同在于,使用前需要先安装服务端的Milvus,否则会有以下错误:pymilvus.exceptions.MilvusException: <MilvusException: (code=2, message=Fail connecting to server on 127.0.0.1:19530. Timeout)>

安装Milvus:根据你的操作系统和需求,选择适合的安装方式,可以是Docker容器、二进制文件或源代码编译安装。

dokcer

安装

  • wget https://github.com/milvus-io/milvus/releases/download/v2.3.4/milvus-standalone-docker-compose.yml -O docker-compose.yml
  • sudo docker compose up -d
csharp 复制代码
$ sudo docker compose up -d
[+] Running 23/23
 ✔ standalone 7 layers [⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                                                                                                                                                                                                                               13.8s 
   ✔ d5fd17ec1767 Pull complete                                                                                                                                                                                                                                                                                                        2.4s 
   ✔ 7ab813dbf013 Pull complete                                                                                                                                                                                                                                                                                                        2.6s 
   ✔ 971f9356e3f1 Pull complete                                                                                                                                                                                                                                                                                                        4.1s 
   ✔ 278f4560205e Pull complete                                                                                                                                                                                                                                                                                                        4.2s 
   ✔ b83f734869d9 Pull complete                                                                                                                                                                                                                                                                                                       10.0s 
   ✔ 1f27396f6efc Pull complete                                                                                                                                                                                                                                                                                                       10.1s 
   ✔ fe556ec02776 Pull complete                                                                                                                                                                                                                                                                                                       10.1s 
 ✔ etcd 7 layers [⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                                                                                                                                                                                                                                     15.8s 
   ✔ dbba69284b27 Pull complete                                                                                                                                                                                                                                                                                                       10.6s 
   ✔ 270b322b3c62 Pull complete                                                                                                                                                                                                                                                                                                       10.7s 
   ✔ 7c21e2da1038 Pull complete                                                                                                                                                                                                                                                                                                       10.8s 
   ✔ cb4f77bfee6c Pull complete                                                                                                                                                                                                                                                                                                       10.8s 
   ✔ e5485096ca5d Pull complete                                                                                                                                                                                                                                                                                                       10.8s 
   ✔ 3ea3736f61e1 Pull complete                                                                                                                                                                                                                                                                                                       10.9s 
   ✔ 1e815a2c4f55 Pull complete                                                                                                                                                                                                                                                                                                       10.9s 
 ✔ minio 6 layers [⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                                                                                                                                                                                                                                     14.1s 
   ✔ c7e856e03741 Pull complete                                                                                                                                                                                                                                                                                                        6.6s 
   ✔ c1ff217ec952 Pull complete                                                                                                                                                                                                                                                                                                        6.6s 
   ✔ b12cc8972a67 Pull complete                                                                                                                                                                                                                                                                                                        6.6s 
   ✔ 4324e307ea00 Pull complete                                                                                                                                                                                                                                                                                                        6.9s 
   ✔ 152089595ebc Pull complete                                                                                                                                                                                                                                                                                                        6.9s 
   ✔ 05f217fb8612 Pull complete                                                                                                                                                                                                                                                                                                       10.3s 
[+] Building 0.0s (0/0)                                                                                                                                                                                                                                                                                                                     
[+] Running 4/4
 ✔ Network milvus               Created                                                                                                                                                                                                                                                                                                0.1s 
 ✔ Container milvus-minio       Started                                                                                                                                                                                                                                                                                                4.6s 
 ✔ Container milvus-etcd        Started                                                                                                                                                                                                                                                                                                3.5s 
 ✔ Container milvus-standalone  Started   
csharp 复制代码
$ sudo docker compose ps
NAME                IMAGE                                      COMMAND                  SERVICE             CREATED              STATUS                        PORTS
milvus-etcd         quay.io/coreos/etcd:v3.5.5                 "etcd -advertise-cli..."   etcd                About a minute ago   Up About a minute (healthy)   2379-2380/tcp
milvus-minio        minio/minio:RELEASE.2023-03-20T20-16-18Z   "/usr/bin/docker-ent..."   minio               About a minute ago   Up About a minute (healthy)   0.0.0.0:9000-9001->9000-9001/tcp, :::9000-9001->9000-9001/tcp
milvus-standalone   milvusdb/milvus:v2.3.4                     "/tini -- milvus run..."   standalone          About a minute ago   Up About a minute (healthy)   0.0.0.0:9091->9091/tcp, :::9091->9091/tcp, 0.0.0.0:19530->19530/tcp, :::19530->19530/tcp

测试链接

  • docker port milvus-standalone 19530/tcp // docker port 命令用于查看正在运行的容器中某个端口的映射情况
csharp 复制代码
$ sudo docker port milvus-standalone 19530/tcp
0.0.0.0:19530
[::]:19530

停止 Milvus服务

  • 要停止 Milvus 单机版,请运行:

  • sudo docker compose down

  • 如需在停止 Milvus 后删除数据,请执行以下命令:

  • sudo rm -rf volumes

客户端使用

安装

csharp 复制代码
$ pip3 install pymilvus # https://github.com/milvus-io/pymilvus

使用

csharp 复制代码
from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection, utility




# --------------------------------------------------------------------------------------------
# 服务器地址信息
HOST = '127.0.0.1'
PORT = '19530'
# 向量信息
DIM = 200 # dimension
COLLECTION_NAME = 'test'
# --------------------------------------------------------------------------------------------
# 创建 Milvus 集合,可参考https://milvus.io/docs/create_collection.md
def create_milvus_collection(collection_name, dim):
    # 是否已存在同名集合
    if utility.has_collection(collection_name):
        utility.drop_collection(collection_name)# 如果存在,则删除已有集合
    
    # 定义集合的字段信息。注:为了降低数据插入的复杂度,Milvus 允许你为每个标量字段指定一个默认值,不包括主键字段
    fields = [
        FieldSchema(name='path', dtype=DataType.VARCHAR, description='图像路径', max_length=500, 
                    is_primary=True, auto_id=False),# 存储图像路径的 'path' 字段
        FieldSchema(name='embedding', dtype=DataType.FLOAT_VECTOR, description='图像嵌入向量', dim=dim)# 存储图像嵌入向量的 'embedding' 字段
    ]
    
    # 创建集合的模式
    schema = CollectionSchema(fields=fields, description='集合描述信息')
    
    # 使用架构创建集合,到这一步创建的集合就能使用了
    collection = Collection(name=collection_name, schema=schema)

    #  定义用于创建索引的参数,以下示例构建一个 10 聚类IVF_FLAT索引,其中欧几里得距离 (L2) 作为相似度指标
    index_params = {
        "metric_type":"L2",
        "index_type":"IVF_FLAT",
        "params":{"nlist":10}
    }

    # 在 'embedding' 字段上使用指定参数创建索引
    collection.create_index(field_name='embedding', index_params=index_params)
    
    # 返回创建好的集合对象
    return collection

# 发起连接
connections.connect(host=HOST, port=PORT)

# 创建 collection
collection = create_milvus_collection(COLLECTION_NAME, DIM)
print(f'A new collection created: {COLLECTION_NAME}')
# 或者直接连接已有collection collection = Collection("book")


import random
data = [ [str(i) for i in range(2000)],  [[random.random() for _ in range(200)] for _ in range(2000)], # None,
        ]
print(len(data))
mr = collection.insert(data)

search_params = {
    "metric_type": "L2", 
    "offset": 0, 
    "ignore_growing": False, 
    "params": {"nprobe": 10}
}

collection.load()
results = collection.search(
    data=[[random.random() for _ in range(200)]], 
    anns_field="embedding", # Name of the field to search on.
    param=search_params,
    limit=10,
    expr=None,# 用于筛选属性的布尔表达式。有关更多信息,请参见布尔表达式规则。https://milvus.io/docs/boolean.md
    output_fields=['embedding'],#要返回的字段的名称。Milvus 支持返回向量字段。(可选)	
    # consistency_level="Strong" # 搜索的一致性级别(可选)	
)

print(results[0].ids)
print(results[0].distances)
hit = results[0][0]
print(hit.entity.get('embedding')) # 需要指定output_fields

# ['537', '1228', '389', '1527', '395', '190', '1221', '555', '1789', '886']
# [25.513811111450195, 26.030805587768555, 26.122865676879883, 26.59450912475586, 26.952003479003906, 27.123659133911133, 27.264328002929688, 27.28336524963379, 27.417621612548828, 27.71729278564453]
# [0.15461023, 0.30096045, 0.26865703, 0.25927073, 0.33812553, 0.54217076, 0.15246719, 0.731632, 0.45709008, 0.79914236, 0.9088526, 0.02686498, 0.42263803, 0.69333476, 0.39840952, 0.6991515, 0.5305877, 0.6620755, 0.5817265, 0.21614578, 0.8906462, 0.64077824, 0.09763326, 0.8131759, 0.31869066, 0.7435266, 0.727443, 0.6023419, 0.665456, 0.3228657, 0.10494679, 0.7091096, 0.3667962, 0.3149366, 0.15853179, 0.24909244, 0.23726037, 0.17990382, 0.3514512, 0.116617575, 0.5656539, 0.36453706, 0.7430549, 0.5163423, 0.17115992, 0.3062062, 0.9076736, 0.5650338, 0.43389124, 0.6029854, 0.3382137, 0.38251325, 0.7953752, 0.19413383, 0.21625121, 0.04543528, 0.97489053, 0.76131046, 0.17360009, 0.32513952, 0.7822587, 0.99820197, 0.97119784, 0.11839666, 0.004737074, 0.18586244, 0.21051529, 0.5463567, 0.28732273, 0.59985745, 0.35132825, 0.17821868, 0.08039577, 0.22121702, 0.51074564, 0.9789643, 0.91906327, 0.3212936, 0.9785981, 0.70479745, 0.77640325, 0.03191031, 0.12803258, 0.8522966, 0.48946765, 0.8437068, 0.17805281, 0.3471558, 0.7912329, 0.19458486, 0.9588124, 0.5400154, 0.3107983, 0.08004966, 0.40348408, 0.8400167, 0.255088, 0.29406822, 0.69000036, 0.7577903, 0.6970145, 0.99666446, 0.5368813, 0.25070563, 0.10906121, 0.6366669, 0.75897807, 0.2470287, 0.83007634, 0.17270081, 0.37081972, 0.5600866, 0.47211888, 0.48388532, 0.09467795, 0.43837216, 0.3848784, 0.33862317, 0.5992313, 0.49879825, 0.21382369, 0.4665225, 0.20776376, 0.41195828, 0.77341104, 0.41533098, 0.1488313, 0.29170626, 0.90135145, 0.9490258, 0.5797127, 0.046041798, 0.032213394, 0.9823944, 0.22410004, 0.01474563, 0.54565424, 0.84022516, 0.3146623, 0.60868996, 0.8468924, 0.5047047, 0.44784358, 0.76461, 0.39477462, 0.4341565, 0.04060842, 0.7913311, 0.3800782, 0.76624304, 0.27977547, 0.5467395, 0.7406536, 0.051075574, 0.859247, 0.16734485, 0.55351096, 0.77330744, 0.21997604, 0.6573193, 0.47392654, 0.22703278, 0.21453229, 0.5354482, 0.68723947, 0.3444063, 0.19725236, 0.63618726, 0.20056139, 0.41761643, 0.3148263, 0.0072599854, 0.14207017, 0.96439177, 0.727712, 0.61615413, 0.67021996, 0.73491627, 0.64917046, 0.6545984, 0.6521858, 0.86778504, 0.65002567, 0.65721965, 0.57199746, 0.27476418, 0.5959397, 0.17169125, 0.30866027, 0.6539025, 0.83966345, 0.18539791, 0.64870465, 0.9470506, 0.6794907, 0.75711423, 0.88191146, 0.075844504, 0.9600152, 0.38191438]

相关项目

项目训练营

osschat

轻松搭建基于Milvus的文本检索系统


相关推荐
可观测性用观测云2 分钟前
阿里巴巴 Druid 可观测性最佳实践
数据库
代码吐槽菌42 分钟前
基于微信小程序的智慧乡村旅游服务平台【附源码】
java·开发语言·数据库·后端·微信小程序·小程序·毕业设计
喝醉酒的小白1 小时前
数据库如何确定或计算 LSN(日志序列号)
数据库
dengjiayue1 小时前
使用 redis 实现消息队列
数据库·redis·缓存
小羊学伽瓦1 小时前
【Redis】——最佳实践
数据库·redis·缓存
biubiubiu07062 小时前
Mysql
数据库·mysql
凌辰揽月2 小时前
眨眼睛查看密码工具类
java·开发语言·数据库
Arbori_262152 小时前
oracle 索引失效
数据库·oracle
StarRocks_labs3 小时前
StarRocks 助力首汽约车精细化运营
大数据·数据库·starrocks·spark·数据查询·存算分离
烧瓶里的西瓜皮3 小时前
Go语言从零构建SQL数据库(6) - sql解析器(番外)- *号的处理
数据库·sql·golang