فهرسة حقول StructArray

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

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

قبل البدء

تأكد من أن مخطط المجموعة يحتوي بالفعل على حقل StructArray chunks وأن البيانات قد تم إدراجها.

مسار الحقل الفرعيالنوعالغرض من الفهرس
chunks[emb_list_vector]FLOAT_VECTORالبحث في EmbeddingList باستخدام مقاييس MAX_SIM*.
chunks[emb]FLOAT_VECTORالبحث على مستوى العناصر باستخدام مقاييس متجهة عادية.
chunks[section]VARCHARالتصفية التصنيفية.
chunks[quality_score]FLOATالتصفية الرقمية والمسندات على غرار النطاق.
chunks[has_code]BOOLالتصفية المنطقية.

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

اختر الفهارس

استخدم وضع البحث لاختيار عائلة المقاييس المتجهة.

هدف البحث أو التصفيةالمسار المستهدفما يجب اختياره
البحث في قائمة التضمينchunks[emb_list_vector]مجموعة المقاييس " MAX_SIM* ".
البحث المتجهي على مستوى العنصرchunks[emb]مجموعة مقاييس متجهة عادية، مثل COSINE أو IP أو L2.
التصفية حسب السلسلة أو الفئةchunks[section]فهرس قياسي يدعمه الهدف الخاص بك.
التصفية حسب النطاق العدديchunks[quality_score]، chunks[page]مؤشر قياسي يدعمه الهدف الخاص بك.
التصفية حسب القيمة المنطقيةchunks[has_code]مؤشر قياسي يدعمه الهدف الخاص بك.

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

إنشاء فهارس متجهة

يُنشئ المثال التالي فهرسين متجهين. يستخدم الفهرس الأول مقياس " MAX_SIM* " للبحث في قائمة التضمين (EmbeddingList). ويستخدم الفهرس الثاني مقياس متجه عادي للبحث على مستوى العنصر.

from pymilvus import MilvusClient

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

index_params = client.prepare_index_params()

# Index for EmbeddingList search.
index_params.add_index(
    field_name="chunks[emb_list_vector]",
    index_name="chunks_emb_list_max_sim",
    index_type="HNSW",
    metric_type="MAX_SIM_COSINE",
    params={
        "M": 16,
        "efConstruction": 200,
    },
)

# Index for element-level search.
index_params.add_index(
    field_name="chunks[emb]",
    index_name="chunks_emb_cosine",
    index_type="HNSW",
    metric_type="COSINE",
    params={
        "M": 16,
        "efConstruction": 200,
    },
)

client.create_index(
    collection_name="tech_articles",
    index_params=index_params,
)

تحذير لا تقم بإنشاء فهرس « MAX_SIM* » وفهرس بمقياس متجه عادي في نفس الحقل الفرعي للمتجه. إذا كان كلا وضعي البحث مطلوبين، فاكتب المتجهات في حقلين فرعيين منفصلين للمتجه وأنشئ فهرسًا واحدًا لكل حقل فرعي.

إنشاء فهارس سكالارية

قم بإنشاء فهارس سكالارية على الحقول الفرعية السكالارية لـ StructArray عند استخدامها في عوامل التصفية. استخدم نفس صيغة مسار structArray[subfield].

index_params = client.prepare_index_params()

index_params.add_index(
    field_name="chunks[section]",
    index_name="chunks_section_inverted",
    index_type="INVERTED",
)

index_params.add_index(
    field_name="chunks[has_code]",
    index_name="chunks_has_code_inverted",
    index_type="INVERTED",
)

index_params.add_index(
    field_name="chunks[quality_score]",
    index_name="chunks_quality_score_sort",
    index_type="STL_SORT",
)

index_params.add_index(
    field_name="chunks[page]",
    index_name="chunks_page_sort",
    index_type="STL_SORT",
)

client.create_index(
    collection_name="tech_articles",
    index_params=index_params,
)

تعد الفهارس القياسية اختيارية ولكنها مفيدة عندما تظهر الحقول الفرعية القياسية لـ StructArray بشكل متكرر في عوامل التصفية، مثل element_filter(chunks, $[quality_score] > 0.9) أو MATCH_ANY(chunks, $[section] == "index").

توافق مقاييس الفهرس

استخدم الجداول التالية لاختيار نوع الفهرس ونوع المقياس لحقل فرعي متجه من StructArray. ابدأ من الهدف، ثم اختر عائلة المقاييس حسب وضع البحث.

اختر نوع فهرس Milvus ونوع المقياس من جداول التوافق التالية.

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

نوع بيانات الحقل الفرعي للمتجهاتنوع الفهرسنوع المقياس
FLOAT_VECTOR، FLOAT16_VECTOR ، BFLOAT16_VECTORIVF_FLAT، IVF_FLAT_CC ، HNSW ، HNSW_SQ ، HNSW_PQ ، HNSW_PRQ ، DISKANNMAX_SIM، MAX_SIM_COSINE ، MAX_SIM_IP ، MAX_SIM_L2
INT8_VECTORHNSW، HNSW_SQ ، HNSW_PQ ، HNSW_PRQMAX_SIM، MAX_SIM_COSINE ، MAX_SIM_IP ، MAX_SIM_L2
BINARY_VECTORHNSWMAX_SIM_HAMMING، MAX_SIM_JACCARD

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

نوع بيانات الحقل الفرعي للمتجهنوع الفهرسنوع المقياس
FLOAT_VECTOR، FLOAT16_VECTOR ، BFLOAT16_VECTORFLAT، IVF_FLAT ، IVF_FLAT_CC ، IVF_SQ8 ، IVF_SQ_CC ، IVF_PQ ، SCANN ، IVF_RABITQ ، IVF_RABITQ_FASTSCAN ، HNSW ، HNSW_SQ ، HNSW_PQ ، HNSW_PRQ ، DISKANNL2، IP ، COSINE
INT8_VECTORHNSW، HNSW_SQ ، HNSW_PQ ، HNSW_PRQL2، IP ، COSINE
BINARY_VECTORHNSWHAMMING، JACCARD
BINARY_VECTORBIN_FLATHAMMING، JACCARD ، SUBSTRUCTURE ، SUPERSTRUCTURE ، MHJACCARD
BINARY_VECTORBIN_IVF_FLATHAMMING، JACCARD

للحصول على الدعم الخاص بالإصدارات والقيود الأخرى، راجع " قيود StructArray".

التحقق من الفهارس

بعد إنشاء الفهارس، قم بوصف فهارس المجموعة أو القائمة للتأكد من أن مسارات الحقول الفرعية المتوقعة قد تم فهرستها.

indexes = client.list_indexes(
    collection_name="tech_articles",
)

print(indexes)

يمكنك أيضًا وصف فهرس معين إذا كان إصدار SDK الخاص بك يوفر واجهات برمجة تطبيقات (API) لوصف الفهارس.

index = client.describe_index(
    collection_name="tech_articles",
    index_name="chunks_emb_cosine",
)

print(index)

قواعد الفهرسة

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

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

  • إنشاء فهرس على chunks.emb بدلاً من chunks[emb].

  • إنشاء فهرس MAX_SIM* فقط ثم محاولة إجراء بحث على مستوى العنصر في نفس الحقل الفرعي.

  • إنشاء فهرس متجه عادي فقط ثم محاولة تشغيل بحث EmbeddingList على نفس الحقل الفرعي.

  • إعادة استخدام حقل فرعي متجه واحد لكل من مقاييس MAX_SIM* والمقاييس المتجهة العادية.

  • تجاهل الفهارس القياسية لمرشحات StructArray المستخدمة بكثرة.

  • فهرسة حقل فرعي لـ StructArray غير موجود في مخطط Struct.

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

  1. لتشغيل بحث EmbeddingList على مستوى الكيان أو البحث المتجه على مستوى العنصر، اقرأ " البحث المتجه الأساسي باستخدام StructArray".

  2. لتصفية الحقول الفرعية القياسية لـ StructArray أثناء البحث، اقرأ " البحث المُصفى باستخدام StructArray".

  3. لمراجعة حدود الفهرس والمقاييس، اقرأ " حدود StructArray".

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

جرب Managed Milvus مجاناً

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

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

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