محتويات الدورة

Elasticsearch / الأساسي: عقود المستندات والاستعلامات / الدرس 6

الفرز والصفحات وعقود النتائج

أعد صفحات مقتنيات مستقرة، مع ضبط شكل النتيجة والصفحات العميقة وصورة البحث المتغيرة.

وقت القراءة التقريبي: 5 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • ابنِ ترتيب فرز كلياً باستخدام أنواع حقول مناسبة.
  • اشرح search_after ونقطة الزمن PIT ودلالات عدد النتائج الإجمالي.

الصفحة أكثر من حجمها

تحتاج صفحة مجموعة المقتنيات إلى استعلام أهلية، وحقول استجابة مختارة، وترتيب كلي، وقاعدة متابعة. يترك الفرز بالسنة وحدها حالات تعادل؛ ويمكن لمعرّف artifact_id ثابت وفريد من نوع keyword إكمال الترتيب لمجموعة بيانات ثابتة. لا تفرز نص العنوان المحلل إذا كنت تقصد تمثيلاً دقيقاً من نوع keyword. وللفرز المباشر على _id قيود، وهو ليس بديلاً عاماً لحقل هوية تجارية تدعم doc values. اشرح صراحة موضع السنة الغائبة واتجاه الفرز. وعندما يغير المستخدم شروطه، يجب أن يبدأ تسلسلاً جديداً للمتابعة، لا أن يعيد استخدام مؤشر لا يخص تلك الشروط.

اقرأ قيم الفرز المعادة

يطلب جسم الاستعلام أدناه قطعتين مرتبتين بالسنة ثم المعرّف. في المجتمع الاصطناعي الثابت المرتب على صورة (1880, art-100) ثم (1890, art-101) ثم (1890, art-102)، تنتهي الصفحة الأولى ذات الصفين عند (1890, art-101). تتضمن نتيجة كل مستند قيم فرزه عند طلب فرز صريح. ينبغي للتطبيق حفظ القيم المعادة من الخادم وأنواعها، لا إعادة بناء المؤشر من نص العرض المنسق. تحد تصفية المصدر من الحقول المعادة من المصدر، لكنها لا توفر تفويضاً على مستوى الحقل، ولا تزيل كل العمل الداخلي اللازم لجلب المستند.

json مثال تقني توضيحي؛ النتائج المنطقية مستنتجة ولم تُختبر على المحرك.
{"size":2,"query":{"match_all":{}},"sort":[{"year":"asc"},{"artifact_id":"asc"}],"_source":["artifact_id","title","year"]}

في ترتيب المثال الثابت المؤلف من ثلاثة مستندات، تكون آخر مصفوفة sort معادة هي [1890,"art-101"]. هذا سلوك مستنتج من البيانات التجريبية.

تتابع search_after الترتيب نفسه

تطلب search_after النتائج التي تلي مجموعة قيم الفرز المرسلة. أبقِ الاستعلام وتعريف الفرز ثابتين بين الطلبات. يتابع الجسم الثاني بعد آخر مجموعة قيم اصطناعية، فيصل إلى art-102 ضمن المثال الثابت. لكن من دون صورة بحث مستقرة، قد تغير الإدراجات أو التحديثات أو refresh المتزامنة المجتمع. تستطيع نقطة زمنية PIT حفظ صورة بحث متسقة بين الطلبات عندما تكون مدعومة وتُدار على النحو الصحيح. استخدم أحدث معرّف PIT معاد، وأدرج كل قيم فض التعادل المطلوبة. ولا تفترض أن مؤشر المثال المؤلف من قيمتين يبقى صالحاً كما هو عندما تضيف PIT فاصل تعادل لوثيقة الجزء.

json مثال تقني توضيحي؛ النتائج المنطقية مستنتجة ولم تُختبر على المحرك.
{"size":2,"query":{"match_all":{}},"sort":[{"year":"asc"},{"artifact_id":"asc"}],"search_after":[1890,"art-101"],"_source":["artifact_id","title","year"]}

هذه متابعة لمثال البحث العادي على بيانات ثابتة، من دون PIT. وهي لا تضمن اتساق صورة البحث عند حدوث تغييرات متزامنة.

تطلب الإزاحات العميقة مرشحين أكثر من الأجزاء

يسهل استخدام from مع size للصفحات القريبة، لكن قد يحتاج كل جزء إلى جمع مرشحين للإزاحات السابقة، فضلاً عن الصفحة التي ستظهر. لا يزيل رفع حد نافذة النتائج هذه الكلفة. فضّل نمط متابعة مدعوماً للاجتياز الطويل، وحدد هل يحتاج المستخدم حقاً إلى أرقام صفحات عشوائية. وتحتفظ سياقات PIT بموارد أيضاً، لذا تحتاج مهلة keep-alive محدودة وتنظيفاً، وليست علامات مرجعية دائمة مجانية. أما Scroll فيخدم حالات معينة للاجتياز الجماعي، ولا ينبغي اختياره لأن اسمه يشبه تمرير واجهة المستخدم. طابق الآلية مع متطلب واضح للاتساق والتفاعل.

اقرأ علاقة العدد الإجمالي

قد يحمل العدد الإجمالي للنتائج relation بقيمة eq للدقة، أو gte للدلالة على حد أدنى وفق سياسة التتبع. وقد يضلل عرض كل قيمة بوصفها عدداً دقيقاً لقطع المجموعة المستخدمين. ويمكن لـtrack_total_hits طلب عد أقوى بتكلفة إضافية عندما يبرر المتطلب ذلك. وقد تعلن استجابة البحث timed_out أو أجزاء فاشلة أيضاً؛ فلا تثبت قائمة نتائج غير خالية اكتمال البحث. حدّد هل يقبل التطبيق نتائج جزئية أم يعرض حالة نقص صريحة. واربط رموز المتابعة بشروط الوصول المسموحة للمستدعي، حتى لا يتيح نسخ مؤشر تجاوز تلك القيود.

الأخطاء الشائعة وإصلاحها

تكرر الصفحات قطعاً تتساوى سنة ترتيبها

لماذا يحدث؟
يفتقد الفرز فاصل تعادل ثابتاً وفريداً.
كيف تصلحه؟
أضف حقل هوية مناسباً من نوع keyword، واحتفظ بمجموعات sort المعادة.
كيف تتجنب تكراره؟
اختبر عدة قطع تتساوى في قيمة الفرز الأساسية.

search_phase_execution_exception

لماذا يحدث؟
يتعارض الفرز المطلوب أو نافذة النتائج مع سلوك الحقل أو الحدود.
كيف تصلحه؟
افحص السبب التفصيلي، واستخدم حقول فرز معينة وآلية متابعة مناسبة.
كيف تتجنب تكراره؟
راجع الصفحات بعمق واقعي قبل النشر.

يُعرض الحد الأدنى لعدد النتائج كأنه عدد دقيق

لماذا يحدث؟
تجاهل التطبيق hits.total.relation.
كيف تصلحه؟
احتفظ بقيمة relation، أو اطلب سياسة عد دقيق يبررها المتطلب.
كيف تتجنب تكراره؟
ضمّن الاستجابات الجزئية والمنتهية بمهلة والأعداد ذات الحد الأدنى في بيانات اختبار الواجهة.

اختبر فهمك

1. أي صف في المثال يلي مجموعة الفرز [1890,"art-101"] عند الترتيب التصاعدي؟

اعرض الحل المشروح

يليها (1890, art-102)، لأن السنة متساوية ومعرّف keyword أكبر. احتفظ بأنواع قيم المجموعة كما أعادها الخادم. يفترض هذا الجواب مجتمعاً ثابتاً؛ وإذا احتاج المنتج صورة متسقة عبر refresh متزامنة، فاستخدم PIT تُدار على النحو الصحيح.

2. لماذا لا تكفي زيادة الحد الأقصى لنافذة النتائج لاستراتيجية صفحات عميقة؟

اعرض الحل المشروح

تسمح الزيادة بالاحتفاظ بمرشحين أكثر، لكنها لا تزيل كلفة جمعهم والذاكرة في كل جزء. حدد متطلب الاجتياز، وقيّم search_after مع سياق اتساق مناسب. ضع ميزانية لعمر الموارد، وتعامل مع الاستجابات الجزئية بدلاً من اعتبار الحد الأكبر دليلاً على تجربة قابلة للتوسع.

أهم ما تعلمته

  • تحتاج الصفحات المستقرة إلى ترتيب كلي وصورة بحث محددة.
  • الأعداد ومؤشرات النتائج الجزئية جزء من عقد الاستجابة.

المراجع الرسمية