• نبذة عن ميلفوس
  • ابدأ الآن
  • المفاهيم
  • دليل المستخدم
    • المجموعات
    • المخطط وحقول البيانات
    • إدراج وحذف
    • الفهارس
      • مؤشرات المتجهات العائمة
      • مؤشرات المتجهات الثنائية
      • فهارس المتجهات المتفرقة
      • الفهارس العددية
      • الفهارس الممكّنة لوحدة معالجة الرسومات
    • بحث
    • التضمين وإعادة التصنيف
    • تحسين التخزين
  • استيراد البيانات
  • أدوات الذكاء الاصطناعي
  • دليل الإدارة
  • الأدوات
  • عمليات الدمج
  • البرامج التعليمية
  • الأسئلة الشائعة
  • API Reference

RTREECompatible with Milvus 2.6.4+

الفهرس RTREE هو هيكل بيانات قائم على الشجرة يعمل على تسريع الاستعلامات على GEOMETRY الحقول في ميلفوس. إذا كانت مجموعتك تخزن كائنات هندسية مثل النقاط أو الخطوط أو المضلعات بتنسيق نص معروف جيدًا (WKT ) وتريد تسريع التصفية المكانية، فإن RTREE هو الخيار المثالي.

كيف يعمل

يستخدم Milvus فهرس RTREE لتنظيم وتصفية البيانات الهندسية بكفاءة، باتباع عملية من مرحلتين:

المرحلة 1: بناء الفهرس

  1. إنشاء العقد الورقية: لكل كائن هندسي، قم بحساب الحد الأدنى للمستطيل المحيط به (MBR)، وهو أصغر مستطيل يحتوي على الكائن بالكامل، وقم بتخزينه كعقدة ورقة.

  2. جمِّع في مربعات أكبر: قم بتجميع العقد الورقية القريبة معًا ولف كل مجموعة مع MBR جديد، لتكوين عقد داخلية. على سبيل المثال، تحتوي المجموعة B على D وE؛ وتحتوي المجموعة C على F وG.

  3. أضف عقدة الجذر: أضف عقدة جذر تغطي MBR جميع المجموعات الداخلية، مما ينتج عنه بنية شجرة متوازنة الارتفاع.

How Retree Works كيف يعمل ريتري

المرحلة 2: تسريع الاستعلامات

  1. تشكيل MBR الاستعلام: احسب MBR لهندسة الاستعلام الخاص بك.

  2. تشذيب الفروع: بدءًا من الجذر، قارن MBR للاستعلام بكل عقدة داخلية. تخطي أي فروع لا يتقاطع MBR الخاص بها مع MBR للاستعلام.

  3. اجمع الفروع المرشحة: النزول إلى الفروع المتقاطعة لجمع العقد الورقية المرشحة.

  4. التطابق التام: لكل مرشح، قم بإجراء مسند مكاني دقيق لتحديد التطابقات الحقيقية.

إنشاء فهرس RTREE

يمكنك إنشاء فهرس RTREE على حقل GEOMETRY محدد في مخطط مجموعتك.

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530") # Replace with your server address

# Assume you have defined a GEOMETRY field named "geo" in your collection schema

# Prepare index parameters
index_params = client.prepare_index_params()

# Add RTREE index on the "geo" field
index_params.add_index(
    field_name="geo",
    index_type="RTREE",      # Spatial index for GEOMETRY
    index_name="rtree_geo",  # Optional, name your index
    params={}                # No extra params needed
)

# Create the index on the collection
client.create_index(
    collection_name="geo_demo",
    index_params=index_params
)

الاستعلام باستخدام RTREE

يمكنك التصفية باستخدام عوامل الهندسة في التعبير filter. في حالة وجود RTREE على الحقل المستهدف GEOMETRY ، يستخدمه ميلفوس لتشذيب المرشحين تلقائيًا. بدون الفهرس، يعود عامل التصفية إلى المسح الكامل.

للاطلاع على قائمة كاملة بالمشغلات المتاحة الخاصة بالهندسة، راجع مشغلات الهندسة.

مثال 1: تصفية فقط

ابحث عن جميع الأجسام الهندسية داخل مضلع معين:

filter_expr = "ST_CONTAINS(geo, 'POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))')"

res = client.query(
    collection_name="geo_demo",
    filter=filter_expr,
    output_fields=["id", "geo"],
    limit=10
)
print(res)   # Expected: a list of rows where geo is entirely inside the polygon

مثال 2: البحث عن المتجهات + التصفية المكانية

ابحث عن أقرب المتجهات التي تتقاطع أيضًا مع خط مستقيم:

# Assume you've also created an index on "vec" and loaded the collection.
query_vec = [[0.1, 0.2, 0.3, 0.4, 0.5]]
filter_expr = "ST_INTERSECTS(geo, 'LINESTRING (1 1, 2 2)')"

hits = client.search(
    collection_name="geo_demo",
    data=query_vec,
    limit=5,
    filter=filter_expr,
    output_fields=["id", "geo"]
)
print(hits)  # Expected: top-k by vector similarity among rows whose geo intersects the line

لمزيد من المعلومات حول كيفية استخدام حقل GEOMETRY ، راجع حقل الهندسة.

إسقاط فهرس

استخدم الأسلوب drop_index() لإزالة فهرس موجود من مجموعة.

  • في الإصدار 2.6.3 أو الإصدار 2.6.3 أو الإصدارات الأقدم، يجب عليك تحرير المجموعة قبل إسقاط فهرس قياسي.

  • اعتبارًا من الإصدار 2.6.4 أو الإصدار الأحدث، يمكنك إسقاط فهرس قياسي مباشرةً بمجرد عدم الحاجة إليه - لا حاجة لتحرير المجموعة أولاً.

client.drop_index(
    collection_name="geo_demo",   # Name of the collection
    index_name="rtree_geo" # Name of the index to drop
)

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟