安装和简单使用Milvus

安装和简单使用Milvus

1 介绍

Milvus是国产的高性能分布式向量数据库。

# Milvus官网
https://milvus.io/

# 安装文档
https://milvus.io/docs/install-overview.md

# Python的对应关系和接口文档
https://milvus.io/api-reference/pymilvus/v2.4.x/About.md

2 安装Milvus

2.1 安装数据库

# 下载shell脚本
wget https://github.com/milvus-io/milvus/releases/download/v2.4.13/milvus-standalone-docker-compose.yml -O docker-compose.yml

# 执行命令
docker-compose -f milvus-standalone-docker-compose.yml up -d

# 查看容器
docker ps | grep milvus

修改认证权限

# Milvus的配置目录,一般不用
# 下载milvus.yaml文件
# 下载地址
https://raw.githubusercontent.com/milvus-io/milvus/v2.4.13/configs/milvus.yaml

# 修改milvus.yaml文件
...
common:
...
  security:
    # 修改milvus.yaml中的下面参数为: true
    authorizationEnabled: false
...

# 在milvus-standalone-docker-compose.yml中添加共享数据卷
...
  # 安装milvus
  standalone:
    container_name: milvus-standalone
    ...
    volumes:
      # Milvus的配置目录,将修改后的文件放在下面即可
      - /home/milvus/milvus/configs/milvus.yaml:/milvus/configs/milvus.yaml
      ...

milvus-standalone-docker-compose.yml

version: '3.5'

services:
  # 安装etcd
  etcd:
    container_name: milvus-etcd
    image: quay.io/coreos/etcd:v3.5.5
    restart: always
    environment:
      - ETCD_AUTO_COMPACTION_MODE=revision
      - ETCD_AUTO_COMPACTION_RETENTION=1000
      - ETCD_QUOTA_BACKEND_BYTES=4294967296
      - ETCD_SNAPSHOT_COUNT=50000
    volumes:
      - /home/milvus/etcd:/etcd
    command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
    healthcheck:
      test: ["CMD", "etcdctl", "endpoint", "health"]
      interval: 30s
      timeout: 20s
      retries: 3
  
  # 安装minio
  minio:
    container_name: milvus-minio
    image: minio/minio:RELEASE.2023-03-20T20-16-18Z
    restart: always
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    ports:
      - "9001:9001"
      - "9000:9000"
    volumes:
      - /home/milvus/minio:/minio_data
    command: minio server /minio_data --console-address ":9001"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3
      
  # 安装milvus
  standalone:
    container_name: milvus-standalone
    image: milvusdb/milvus:v2.4.13
    restart: always
    command: ["milvus", "run", "standalone"]
    security_opt:
    - seccomp:unconfined
    environment:
      ETCD_ENDPOINTS: etcd:2379
      MINIO_ADDRESS: minio:9000
    volumes:
      # Milvus的配置目录,可以不配置
      # 下载地址:https://raw.githubusercontent.com/milvus-io/milvus/v2.4.13/configs/milvus.yaml
      # common:
      #  security:
      #    # 修改milvus.yaml中的下面参数为: true
      #    authorizationEnabled: false
      - /home/milvus/milvus/configs/milvus.yaml:/milvus/configs/milvus.yaml
      # Milvus的数据目录
      - /home/milvus/milvus/data:/var/lib/milvus
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
      interval: 30s
      start_period: 90s
      timeout: 20s
      retries: 3
    ports:
      - "19530:19530"
      - "9091:9091"
    depends_on:
      - "etcd"
      - "minio"

networks:
  default:
    name: milvus

2.2 安装工具

⚠️ 注意:attu和Mivus有版本对应关系。

docker run -itd \
--name milvus-attu \
--restart always \
-p 3000:3000 \
zilliz/attu:v2.4.8

访问attu

# 访问地址
http://192.168.108.160:3000/#/

# 访问成功后输入Milvus的地址和端口号即可
# Mlivus的默认账号/密码:root/Milvus
192.168.108.160:19530

3 使用Milvus

3.1 安装依赖

# 注意有版本对应关系
pip install pymilvus==2.4.8 -i https://pypi.tuna.tsinghua.edu.cn/simple

3.2 简单使用

import json

from pymilvus import MilvusClient, FieldSchema, DataType
from sentence_transformers import SentenceTransformer

db_name = "test_db"
collection_name = "test_collection"


def create_db():
    # 连接Milvus
    client_tmp = MilvusClient(
        uri="http://192.168.108.160:19530",
        # 默认的账号和密码
        token="root:Milvus",
        # 连接默认数据库
        db_name="default"
    )

    # 创建数据库
    client_tmp.create_database(db_name)


def create_collection():
    # 连接Milvus
    client = MilvusClient(
        uri="http://192.168.108.160:19530",
        # 默认的账号和密码
        token="root:Milvus",
        db_name=db_name
        # db_name="default"
    )

    # 创建集合
    # 判断索引是否存在
    if client.has_collection(collection_name=collection_name):
        # 删除集合
        client.drop_collection(collection_name=collection_name)

    # 1 设置schema
    schema_config = MilvusClient.create_schema(
        auto_id=False,
        enable_dynamic_field=True,
    )
    # 2 设置索引
    index_params_config = client.prepare_index_params()

    # 设置主键
    schema_config.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
    index_params_config.add_index(
        field_name="id",
        # 索引设置标量
        index_type="STL_SORT"
    )

    # 设置评分类型
    schema_config.add_field(field_name="score", datatype=DataType.FLOAT)
    # 设置字符类型
    schema_config.add_field(field_name="summary", datatype=DataType.VARCHAR, max_length=300)

    # 设置向量
    schema_config.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=384)
    index_params_config.add_index(
        field_name="vector",
        index_type="AUTOINDEX",
        metric_type="COSINE"
    )

    # 创建索引
    client.create_collection(
        collection_name=collection_name,
        # 设置schema
        schema=schema_config,
        index_params=index_params_config,
        # 自动编号
        auto_id=True,
        # 开启自动动态属性
        enable_dynamic_field=True
    )


def add_data_vec():
    # 连接Milvus
    client = MilvusClient(
        uri="http://192.168.108.160:19530",
        # 默认的账号和密码
        token="root:Milvus",
        db_name=db_name
    )

    # 生成向量
    model = SentenceTransformer(
        model_name_or_path="E:/model/sentencetransformers/all-MiniLM-L6-v2"
    )

    # 句子列表
    sentences = [
        "This framework generates embeddings for each input sentence",
        "Sentences are passed as a list of string.",
        "The quick brown fox jumps over the lazy dog.",
    ]

    # 注意:all-MiniLM-L6-v2的输出维度是384
    sentence_embeddings = model.encode(sentences)

    # 向量列表
    data_list = list()

    # 打印嵌入模型
    i = 0
    for sentence, embedding in zip(sentences, sentence_embeddings):
        print("Sentence:", sentence)
        print("Embedding:", embedding)

        data_item = dict()
        data_item["id"] = i
        data_item["score"] = 0.1
        data_item["summary"] = sentence
        data_item["vector"] = embedding.tolist()

        print(data_item)

        data_list.append(data_item)

        # 增加编号
        i = i + 1

    # 设置索引名称
    res = client.insert(collection_name=collection_name, data=data_list)

    # 返回值
    print(res)

    pass


def query_data():
    # 连接Milvus
    client = MilvusClient(
        uri="http://192.168.108.160:19530",
        # 默认的账号和密码
        token="root:Milvus",
        db_name=db_name
    )

    # 生成向量
    model = SentenceTransformer(
        model_name_or_path="E:/model/sentencetransformers/all-MiniLM-L6-v2"
    )

    sentence_embeddings = model.encode("my dog")

    res = client.search(
        collection_name=collection_name,
        # 设置向量
        # 例子: data = [ [0.3580376395471989, -0.6023495712049978, ……] ]
        data=[sentence_embeddings.tolist()],
        # 最大返回值数量
        limit=5,
        # 设置搜索参数
        search_params={"metric_type": "COSINE", "params": {}},

        # 设置实体中输出的参数
        output_fields=["score", "summary"]
    )

    print(res)

    # 美化输出的缩进量:indent=4
    result = json.dumps(res, indent=4)
    print(result)


if __name__ == '__main__':
    # 1 创建数据库
    # create_db()

    # 2 创建集合
    # create_collection()

    # 3 添加向量
    # add_data_vec()

    # 4 查询数据
    query_data()

截图
在这里插入图片描述

### Milvus 安装指南 Milvus 提供了多种安装方式,适用于不同的场景需求。以下是几种常见的安装方法及其适用范围: #### 1. 使用 Helm 安装 Milvus Operator 对于希望在 Kubernetes 集群中部署管理 Milvus 的用户,可以使用 Milvus Operator 来简化这一过程。通过 Helm 安装 Milvus Operator 能够显著降低复杂度并提高效率[^1]。 ```bash helm repo add milvus https://zilliz.com/helm-charts helm install my-milvus milvus/milvus --version {chart-version} ``` 以上命令会将指定版本的 Milvus 部署到 Kubernetes 集群中。 --- #### 2. Docker 单机版安装 如果目标是在单台机器上快速启动 Milvus,则可以通过 Docker 运行官方镜像来实现。这种方法适合测试环境或小型应用。 ```bash docker pull milvusdb/milvus:v{version} # 替换为所需版本号 docker run -d --name milvus_cpu -p 19530:19530 -p 8080:8080 \ -v /path/to/data:/var/lib/milvus milvusdb/milvus:v{version} ``` 此方法简单快捷,无需额外配置即可完成基本功能验证[^4]。 --- #### 3. Milvus Lite (Python 库) 针对资源受限的设备或者需要快速原型设计的情况,可以选择 Milvus Lite。这是一种轻量化的 Python 库形式,可以直接嵌入到应用程序中而不需要单独的服务进程[^3]。 ```python from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection connections.connect("default", host="localhost", port="19530") fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128) ] schema = CollectionSchema(fields, "example_collection") collection = Collection(name="example", schema=schema) print(f"Collection created successfully: {collection.name}") ``` 注意:尽管 Milvus Lite 功能强大,但它仅限于本地运行且不支持分布式扩展[^3]。 --- #### 4. 源码编译安装 当需要自定义修改源代码或探索最新特性时,可以从 GitHub 上克隆仓库并通过源码构建 Milvus。这通常涉及 Go、C++ Python 环境的搭建以及依赖项解决[^5]。 ```bash git clone https://github.com/milvus-io/milvus.git cd milvus make build ./build/scripts/run_server.sh ``` 这种方式较为复杂,建议具备一定开发经验后再尝试。 --- ### 总结 根据实际需求选择合适的安装方案非常重要。Kubernetes 用户推荐采用 **Helm Chart**;追求便捷性的开发者可选用 **Docker 单机版** 或者直接集成 **Milvus Lite** 到项目里;而对于高级定制化则需考虑基于源码的方式进行二次开发[^1][^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值