Chương này giới thiệu cách bắt đầu phát triển Milvus nhanh chóng bằng Python.

Bằng cách chạy mã mẫu mà chúng tôi cung cấp, bạn sẽ hiểu sơ lược về các chức năng của Milvus.

Yêu cầu phiên bản

  • Milvus 2.3.0
  • Python 3 (3.7.1 trở lên)
  • PyMilvus 2.3.x

Cài đặt Milvus Python SDK

python3 -m pip install pymilvus==

Tải mã mẫu

Sử dụng lệnh sau để tải trực tiếp hello_milvus.py hoặc sử dụng lệnh sau để tải xuống.

$ wget https://www.tizi365.com/storage/hello_milvus.py

Giải thích về Mã mẫu

Mã mẫu thực hiện các bước sau.

  • Nhập gói PyMilvus:
from pymilvus import (
    connections,
    utility,
    FieldSchema,
    CollectionSchema,
    DataType,
    Collection,
)
  • Kết nối đến máy chủ:
connections.connect("default", host="localhost", port="19530")
  • Tạo bộ sưu tập:
fields = [
    FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=False),
    FieldSchema(name="random", dtype=DataType.DOUBLE),
    FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=8)
]
schema = CollectionSchema(fields, "hello_milvus là ví dụ demo đơn giản nhất, được sử dụng để giới thiệu API")
hello_milvus = Collection("hello_milvus", schema)
  • Chèn vector vào bộ sưu tập:
import random
entities = [
    [i for i in range(3000)],  # trường pk
    [float(random.randrange(-20, -10)) for _ in range(3000)],  # trường random
    [[random.random() for _ in range(8)] for _ in range(3000)],  # trường embeddings
]
insert_result = hello_milvus.insert(entities)
hello_milvus.flush()
  • Tạo chỉ mục trên các thực thể:
index = {
    "index_type": "IVF_FLAT",
    "metric_type": "L2",
    "params": {"nlist": 128},
}
hello_milvus.create_index("embeddings", index)
  • Tải bộ sưu tập vào bộ nhớ và thực hiện tìm kiếm tương đồng vector:
hello_milvus.load()
vectors_to_search = entities[-1][-2:]
search_params = {
    "metric_type": "L2",
    "params": {"nprobe": 10},
}
result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, output_fields=["random"])
  • Thực hiện truy vấn vector:
result = hello_milvus.query(expr="random > -14", output_fields=["random", "embeddings"])
  • Thực hiện tìm kiếm kết hợp:
result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, expr="random > -12", output_fields=["random"])
  • Xóa thực thể dựa trên khóa chính:
expr = f"pk in [{entities[0][0]}, {entities[0][1]}]"
hello_milvus.delete(expr)
  • Xóa bộ sưu tập:
utility.drop_collection("hello_milvus")

Chạy mã mẫu

Thực thi lệnh sau để chạy mã mẫu.

$ python3 hello_milvus.py

Dưới đây là kết quả trả về và độ trễ truy vấn:

=== Kết nối đến Milvus ===

Liệu bộ sưu tập có tên là hello_milvus có tồn tại trong Milvus: False

=== Tạo bộ sưu tập `hello_milvus` ===

=== Chèn thực thể ===

Số lượng thực thể trong Milvus: 3000

=== Tạo chỉ mục IVF_FLAT ===

=== Tải ===

=== Tìm kiếm dựa trên độ tương đồng vector ===

Khớp: (Khoảng cách: 0.0, ID: 2998), Trường Ngẫu nhiên: -11.0
Khớp: (Khoảng cách: 0.11455299705266953, ID: 1581), Trường Ngẫu nhiên: -18.0
Khớp: (Khoảng cách: 0.1232629269361496, ID: 2647), Trường Ngẫu nhiên: -13.0
Khớp: (Khoảng cách: 0.0, ID: 2999), Trường Ngẫu nhiên: -11.0
Khớp: (Khoảng cách: 0.10560893267393112, ID: 2430), Trường Ngẫu nhiên: -18.0
Khớp: (Khoảng cách: 0.13938161730766296, ID: 377), Trường Ngẫu nhiên: -14.0
Độ trễ tìm kiếm = 0.2796 giây

=== Truy vấn bằng cách sử dụng `random > -14` ===

Kết quả truy vấn:
- {'pk': 9, 'random': -13.0, 'embeddings': [0.298433, 0.931987, 0.949756, 0.598713, 0.290125, 0.094323, 0.064444, 0.306993]}
Độ trễ tìm kiếm = 0.2970 giây

=== Thực hiện tìm kiếm kết hợp bằng cách sử dụng `random > -12` ===

Khớp: (Khoảng cách: 0.0, ID: 2998), Trường Ngẫu nhiên: -11.0
Khớp: (Khoảng cách: 0.15773043036460876, ID: 472), Trường Ngẫu nhiên: -11.0
Khớp: (Khoảng cách: 0.3273330628871918, ID: 2146), Trường Ngẫu nhiên: -11.0
Khớp: (Khoảng cách: 0.0, ID: 2999), Trường Ngẫu nhiên: -11.0
Khớp: (Khoảng cách: 0.15844076871871948, ID: 2218), Trường Ngẫu nhiên: -11.0
Khớp: (Khoảng cách: 0.1622171700000763, ID: 1403), Trường Ngẫu nhiên: -11.0
Độ trễ tìm kiếm = 0.3028 giây

=== Xóa bằng cách sử dụng biểu thức `pk in [0, 1]` ===

Truy vấn trước khi xóa dựa trên biểu thức `pk in [0, 1]` -> Kết quả:
- {'pk': 0, 'random': -18.0, 'embeddings': [0.142279, 0.414248, 0.378628, 0.971863, 0.535941, 0.107011, 0.207052, 0.98182]}
- {'pk': 1, 'random': -15.0, 'embeddings': [0.57512, 0.358512, 0.439131, 0.862369, 0.083284, 0.294493, 0.004961, 0.180082]}

Truy vấn sau khi xóa dựa trên biểu thức `pk in [0, 1]` -> Kết quả: []
=== Xóa bộ sưu tập `hello_milvus` ===