البحث المتجهي الأساسي باستخدام 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
استخدم بحث 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 إزاحة عنصر واحد محدد. لكنه يعيد نتائج مطابقة على مستوى الكيان.
إعادة استخدام حقل فرعي متجه واحد لكلا وضعي البحث. استخدم حقول فرعية متجهة منفصلة لأن كل حقل فرعي متجه لا يقبل سوى فهرس واحد.
الخطوات التالية
لتقييد البحث على مستوى العناصر بشروط قياسية، اقرأ البحث المُصفى باستخدام StructArray.
للبحث حسب حدود النتيجة أو المسافة، اقرأ " البحث في النطاق باستخدام StructArray".
لإرجاع نتيجة واحدة على الأكثر لكل كيان أب بعد البحث على مستوى العنصر، اقرأ " البحث المجمّع باستخدام StructArray".
لدمج البحث باستخدام StructArray مع عمليات بحث متجهة أخرى، اقرأ " البحث الهجين باستخدام StructArray".
لمراجعة أنواع البيانات المدعومة والمقاييس والمرشحات والحدود الخاصة بالإصدارات، اقرأ «حدود StructArray».