البحث المتجهي الأساسي باستخدام StructArray

استخدم هذه الصفحة لإجراء بحث متجهي على الحقول الفرعية المتجهة داخل حقل StructArray. يدعم StructArray وضعين أساسيين للبحث المتجهي: البحث في قائمة التضمين (EmbeddingList)، الذي يقوم بتقييم قائمة التضمين المخزنة في كل كيان، والبحث على مستوى العناصر، الذي يبحث في كل عنصر من عناصر Struct بشكل مستقل.

تستخدم هذه الصفحة مجموعة « tech_articles » من «إنشاء حقل StructArray». تحتوي المجموعة على حقل StructArray باسم « chunks ». يحتوي كل جزء على نص وبيانات وصفية قياسية وحقل فرعي متجه باسم « emb_list_vector » مع فهرس للبحث في قائمة التضمين، وحقل فرعي متجه باسم « emb » مع فهرس للبحث على مستوى العناصر.

قبل البدء

تأكد من أن مخطط المجموعة والبيانات والفهارس جاهزة بالفعل.

المتطلباتمكان الإعداد
قم بإنشاء حقل StructArray، مثل chunks.إنشاء حقل StructArray
أدخل الكيانات التي يحتوي حقل chunks الخاص بها على كائنات Struct.إدراج البيانات في حقول StructArray
قم بإنشاء فهرس MAX_SIM* على chunks[emb_list_vector] من أجل البحث في EmbeddingList.فهرسة حقول StructArray
إنشاء فهرس متجهي قياسي على chunks[emb] للبحث على مستوى العناصر.فهرسة حقول StructArray

تحذير

لا يقبل الحقل المتجه أو الحقل الفرعي المتجه سوى فهرس واحد. إذا كنت بحاجة إلى كل من البحث في EmbeddingList والبحث على مستوى العناصر، فأنشئ حقلين فرعيين متجهين منفصلين. في هذه الصفحة، يتم فهرسة chunks[emb_list_vector] للبحث في EmbeddingList، ويتم فهرسة chunks[emb] للبحث على مستوى العناصر.

اختر وضع البحث

الجانبالبحث في EmbeddingListالبحث على مستوى العنصر
الحقل الفرعي المستهدفchunks[emb_list_vector]chunks[emb]
بيانات الاستعلامقائمة تضمين تحتوي على متجه واحد أو أكثر.متجه عادي.
عائلة المقاييسMAX_SIM*، مثل MAX_SIM_COSINE.مقاييس متجهات عادية، مثل COSINE أو IP أو L2.
ما يمثله كل نتيجةكيان مطابق يكون حقله الفرعي StructArray متشابهًا مع قائمة التضمين الخاصة بالاستعلام.عنصر Struct مطابق داخل حقل StructArray.
تفصيل النتائجمستوى الكيان.مستوى عنصر Struct.
الإزاحةغير قابل للتطبيق.يحدد الموضع الذي يبدأ من الصفر لعنصر Struct المطابق عند إرجاعه.
الاستخدام النموذجيColBERT و ColPali وأنماط الاسترجاع الأخرى ذات التفاعل المتأخر.الاسترجاع على مستوى المقطع، أو مستوى الفقرة، أو مستوى المقتطف، أو مستوى الرقعة، أو مستوى الحقيقة.

استخدم بحث EmbeddingList عندما يحتوي الاستعلام نفسه على متجهات متعددة ويتم فهرسة الحقل الفرعي للمتجه StructArray المستهدف باستخدام مقياس " MAX_SIM* ". والنتيجة هي مطابقة على مستوى الكيان.

from pymilvus import MilvusClient
from pymilvus.client.embedding_list import EmbeddingList

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus",
)

query = EmbeddingList()
query.add([0.12, 0.21, 0.32, 0.44])
query.add([0.18, 0.23, 0.29, 0.36])

results = client.search(
    collection_name="tech_articles",
    data=[query],
    anns_field="chunks[emb_list_vector]",
    limit=3,
    output_fields=[
        "doc_id",
        "title",
        "category",
        "chunks[text]",
        "chunks[section]",
    ],
)

for hits in results:
    for hit in hits:
        print(hit["id"], hit["distance"], hit["entity"])

في وضع البحث هذا، يتحكم مقياس « limit » في عدد الكيانات التي يتم إرجاعها لكل استعلام. يمكن أن تتضمن النتيجة حقول فرعية لـ StructArray، لكن النتيجة نفسها تمثل الكيان الأصلي المطابق بدلاً من عنصر Struct واحد محدد.

للحصول على شرح تفصيلي كامل على غرار ColBERT أو ColPali، راجع «البحث باستخدام قوائم التضمين». تغطي هذه الصفحة فقط سلوك البحث الأساسي في StructArray.

استخدم البحث على مستوى العناصر عندما يتعين أن يشارك كل عنصر من عناصر Struct في البحث المتجه بشكل مستقل. يكون الاستعلام متجهًا عاديًا، ويجب فهرسة الحقل الفرعي للمتجه الهدف باستخدام مقياس متجه عادي.

query_vector = [0.19, 0.24, 0.30, 0.37]

results = client.search(
    collection_name="tech_articles",
    data=[query_vector],
    anns_field="chunks[emb]",
    limit=5,
    output_fields=[
        "doc_id",
        "title",
        "chunks[text]",
        "chunks[section]",
        "chunks[page]",
        "chunks[quality_score]",
    ],
)

for hits in results:
    for hit in hits:
        print(
            "doc_id:", hit["id"],
            "distance:", hit["distance"],
            "offset:", hit.get("offset"),
            "entity:", hit["entity"],
        )

في البحث على مستوى العناصر، تمثل كل نتيجة عنصر Struct مطابق. قيمة « offset » هي الموضع الذي يبدأ من الصفر لهذا العنصر في حقل StructArray. يمكن أن تظهر الكيان نفسه أكثر من مرة إذا تطابق أكثر من عنصر Struct واحد مع الاستعلام. تنطبق قيمة « limit » على نتائج العناصر، وليس على الكيانات الأصلية الفريدة.

تفسير النتائج

عنصر النتيجةالبحث في EmbeddingListالبحث على مستوى العناصر
idالمفتاح الأساسي للكيان المطابق.المفتاح الأساسي للكيان الذي يحتوي على عنصر Struct المطابق.
distance أو النتيجةالنتيجة أو المسافة بين قائمة التضمين الخاصة بالاستعلام وقائمة التضمين المخزنة.النتيجة أو المسافة بين متجه الاستعلام ومتجه عنصر Struct المطابق.
offsetغير قابل للتطبيق.الموضع الذي يبدأ من الصفر لعنصر Struct المطابق عند إرجاعه.
المفاتيح الأساسية المتكررةغير متوقع في الاستعلام الفردي لأن النتائج تكون على مستوى الكيان.ممكن، لأن عناصر Struct متعددة في نفس الكيان يمكن أن تتطابق.
حقول الإخراج المطلوبة لـ StructArrayيتم إرجاعها من الكيان المطابق.يتم إرجاعها مع شكل النتائج على مستوى العنصر الذي تدعمه واجهة برمجة التطبيقات (API) ومجموعة أدوات تطوير البرامج (SDK) المستهدفة.

الأخطاء الشائعة

  • استخدام chunks.emb بدلاً من صيغة مسار الحقل الفرعي المطلوبة chunks[emb].

  • استخدام استعلام EmbeddingList على حقل فرعي متجه تم فهرسته باستخدام مقياس متجه عادي.

  • استخدام استعلام متجه عادي على حقل فرعي متجه مفهرس باستخدام مقياس MAX_SIM*.

  • توقع أن يعيد البحث على مستوى العنصر limit هذا العدد من الكيانات الأصلية الفريدة. فهو يعيد نتائج العناصر.

  • توقع أن يعيد بحث EmbeddingList إزاحة عنصر واحد محدد. لكنه يعيد نتائج مطابقة على مستوى الكيان.

  • إعادة استخدام حقل فرعي متجه واحد لكلا وضعي البحث. استخدم حقول فرعية متجهة منفصلة لأن كل حقل فرعي متجه لا يقبل سوى فهرس واحد.

الخطوات التالية

  1. لتقييد البحث على مستوى العناصر بشروط قياسية، اقرأ البحث المُصفى باستخدام StructArray.

  2. للبحث حسب حدود النتيجة أو المسافة، اقرأ " البحث في النطاق باستخدام StructArray".

  3. لإرجاع نتيجة واحدة على الأكثر لكل كيان أب بعد البحث على مستوى العنصر، اقرأ " البحث المجمّع باستخدام StructArray".

  4. لدمج البحث باستخدام StructArray مع عمليات بحث متجهة أخرى، اقرأ " البحث الهجين باستخدام StructArray".

  5. لمراجعة أنواع البيانات المدعومة والمقاييس والمرشحات والحدود الخاصة بالإصدارات، اقرأ «حدود StructArray».

ترجمة بواسطةDeepL

جرب Managed Milvus مجاناً

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

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

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