فصل حاضر راجع به چگونگی شروع سریع توسعه Milvus با استفاده از Python است.
با اجرای کد نمونهای که ارائه میدهیم، شما به درک اولیه از عملکردهای Milvus خواهید رسید.
نیازمندیهای نسخه
- Milvus 2.3.0
- Python 3 (نسخه 3.7.1 یا بالاتر)
- PyMilvus 2.3.x
نصب Milvus Python SDK
python3 -m pip install pymilvus==
دانلود کد نمونه
از دستور زیر برای دانلود مستقیم hello_milvus.py استفاده کنید یا از دستور زیر برای دانلود استفاده نمایید.
$ wget https://www.tizi365.com/storage/hello_milvus.py
توضیح کد نمونه
کد نمونه مراحل زیر را انجام میدهد.
- وارد کردن پکیج PyMilvus:
from pymilvus import (
connections,
utility,
FieldSchema,
CollectionSchema,
DataType,
Collection,
)
- اتصال به سرور:
connections.connect("default", host="localhost", port="19530")
- ایجاد یک مجموعه:
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 is the simplest demo example, used to introduce the API")
hello_milvus = Collection("hello_milvus", schema)
- وارد کردن بردارها به مجموعه:
import random
entities = [
[i for i in range(3000)], # فیلد pk
[float(random.randrange(-20, -10)) for _ in range(3000)], # فیلد random
[[random.random() for _ in range(8)] for _ in range(3000)], # فیلد embeddings
]
insert_result = hello_milvus.insert(entities)
hello_milvus.flush()
- ایجاد یک اندیس بر روی بردارها:
index = {
"index_type": "IVF_FLAT",
"metric_type": "L2",
"params": {"nlist": 128},
}
hello_milvus.create_index("embeddings", index)
- بارگیری مجموعه به حافظه و انجام جستجوی مشابهت بردارها:
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"])
- انجام پرس و جوی بردارها:
result = hello_milvus.query(expr="random > -14", output_fields=["random", "embeddings"])
- انجام جستجوی ترکیبی:
result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, expr="random > -12", output_fields=["random"])
- حذف بردارها براساس کلید اصلی:
expr = f"pk in [{entities[0][0]}, {entities[0][1]}]"
hello_milvus.delete(expr)
- حذف مجموعه:
utility.drop_collection("hello_milvus")
اجرای کد نمونه
برای اجرای کد نمونه، دستور زیر را اجرا کنید.
$ python3 hello_milvus.py
در زیر نتایج برگشتی و تاخیر پرس و جو نمایش داده شده است:
=== اتصال به Milvus ===
آیا مجموعهای با نام hello_milvus در Milvus وجود دارد؟: False
=== ایجاد مجموعه `hello_milvus` ===
=== درج موجودیتها ===
تعداد موجودیتها در Milvus: 3000
=== ایجاد شاخص IVF_FLAT ===
=== بارگذاری ===
=== جستجو بر اساس تشابه بردار ===
تطبیق: (فاصله: 0.0، شناسه: 2998)، فیلد تصادفی: -11.0
تطبیق: (فاصله: 0.11455299705266953، شناسه: 1581)، فیلد تصادفی: -18.0
تطبیق: (فاصله: 0.1232629269361496، شناسه: 2647)، فیلد تصادفی: -13.0
تطبیق: (فاصله: 0.0، شناسه: 2999)، فیلد تصادفی: -11.0
تطبیق: (فاصله: 0.10560893267393112، شناسه: 2430)، فیلد تصادفی: -18.0
تطبیق: (فاصله: 0.13938161730766296، شناسه: 377)، فیلد تصادفی: -14.0
تاخیر جستجو = 0.2796 ثانیه
=== پرس و جو با استفاده از `random > -14` ===
نتیجه پرس و جو:
-{'pk': 9, 'random': -13.0, 'embeddings': [0.298433, 0.931987, 0.949756, 0.598713, 0.290125, 0.094323, 0.064444, 0.306993]}
تاخیر جستجو = 0.2970 ثانیه
=== انجام جستجوی ترکیبی با استفاده از `random > -12` ===
تطبیق: (فاصله: 0.0، شناسه: 2998)، فیلد تصادفی: -11.0
تطبیق: (فاصله: 0.15773043036460876، شناسه: 472)، فیلد تصادفی: -11.0
تطبیق: (فاصله: 0.3273330628871918، شناسه: 2146)، فیلد تصادفی: -11.0
تطبیق: (فاصله: 0.0، شناسه: 2999)، فیلد تصادفی: -11.0
تطبیق: (فاصله: 0.15844076871871948، شناسه: 2218)، فیلد تصادفی: -11.0
تطبیق: (فاصله: 0.1622171700000763، شناسه: 1403)، فیلد تصادفی: -11.0
تاخیر جستجو = 0.3028 ثانیه
=== حذف با استفاده از عبارت `pk in [0, 1]` ===
پرسوجو قبل از حذف بر اساس عبارت `pk in [0, 1]` -> نتیجه:
-{'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]}
پرسوجو بعد از حذف بر اساس عبارت `pk in [0, 1]` -> نتیجه: []
=== حذف مجموعه `hello_milvus` ===