يقدم هذا الفصل كيفية البدء السريع في تطوير 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 هو أبسط مثال تجريبي، يُستخدم لتقديم واجهة برمجة التطبيقات")
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، ID: 2998)، الحقل العشوائي: -11.0
المطابقة: (المسافة: 0.11455299705266953، ID: 1581)، الحقل العشوائي: -18.0
المطابقة: (المسافة: 0.1232629269361496، ID: 2647)، الحقل العشوائي: -13.0
المطابقة: (المسافة: 0.0، ID: 2999)، الحقل العشوائي: -11.0
المطابقة: (المسافة: 0.10560893267393112، ID: 2430)، الحقل العشوائي: -18.0
المطابقة: (المسافة: 0.13938161730766296، ID: 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، ID: 2998)، الحقل العشوائي: -11.0
المطابقة: (المسافة: 0.15773043036460876، ID: 472)، الحقل العشوائي: -11.0
المطابقة: (المسافة: 0.3273330628871918، ID: 2146)، الحقل العشوائي: -11.0
المطابقة: (المسافة: 0.0، ID: 2999)، الحقل العشوائي: -11.0
المطابقة: (المسافة: 0.15844076871871948، ID: 2218)، الحقل العشوائي: -11.0
المطابقة: (المسافة: 0.1622171700000763، ID: 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` ===