فهرسة حقول 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
يستخدم بحث EmbeddingList مقاييس MAX_SIM*. ويعامل المتجهات الموجودة في حقل فرعي من نوع StructArray على أنها قائمة تضمين ويُرجع نتائج على مستوى الكيان.
| نوع بيانات الحقل الفرعي للمتجهات | نوع الفهرس | نوع المقياس |
|---|---|---|
FLOAT_VECTOR، FLOAT16_VECTOR ، BFLOAT16_VECTOR | IVF_FLAT، IVF_FLAT_CC ، HNSW ، HNSW_SQ ، HNSW_PQ ، HNSW_PRQ ، DISKANN | MAX_SIM، MAX_SIM_COSINE ، MAX_SIM_IP ، MAX_SIM_L2 |
INT8_VECTOR | HNSW، HNSW_SQ ، HNSW_PQ ، HNSW_PRQ | MAX_SIM، MAX_SIM_COSINE ، MAX_SIM_IP ، MAX_SIM_L2 |
BINARY_VECTOR | HNSW | MAX_SIM_HAMMING، MAX_SIM_JACCARD |
البحث على مستوى العناصر
يستخدم البحث على مستوى العناصر مقاييس متجهة عادية. ويقوم بالبحث في كل عنصر من عناصر Struct بشكل مستقل ويمكنه إرجاع إزاحة العنصر المطابق.
| نوع بيانات الحقل الفرعي للمتجه | نوع الفهرس | نوع المقياس |
|---|---|---|
FLOAT_VECTOR، FLOAT16_VECTOR ، BFLOAT16_VECTOR | FLAT، 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 ، DISKANN | L2، IP ، COSINE |
INT8_VECTOR | HNSW، HNSW_SQ ، HNSW_PQ ، HNSW_PRQ | L2، IP ، COSINE |
BINARY_VECTOR | HNSW | HAMMING، JACCARD |
BINARY_VECTOR | BIN_FLAT | HAMMING، JACCARD ، SUBSTRUCTURE ، SUPERSTRUCTURE ، MHJACCARD |
BINARY_VECTOR | BIN_IVF_FLAT | HAMMING، 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.
الخطوات التالية
لتشغيل بحث EmbeddingList على مستوى الكيان أو البحث المتجه على مستوى العنصر، اقرأ " البحث المتجه الأساسي باستخدام StructArray".
لتصفية الحقول الفرعية القياسية لـ StructArray أثناء البحث، اقرأ " البحث المُصفى باستخدام StructArray".
لمراجعة حدود الفهرس والمقاييس، اقرأ " حدود StructArray".