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

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

الاستعلامات المنطقية وسياق التصفية

افصل شروط الأهلية المطلوبة عن الملاءمة، وصرّح بما يجب تحققه من الشروط الاختيارية.

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

أهداف الدرس

  • افهم شروط must وfilter وmust_not وshould.
  • اختر الشروط الدقيقة والنصية الكاملة والنطاقية وفق تعيين الحقول.

الأهلية والترتيب يجيبان عن سؤالين مختلفين

يريد زائر قطع ملاحة برونزية معروضة حالياً. حالة العرض قاعدة أهلية جوابها نعم أو لا، بينما يؤثر تشابه العنوان في ترتيب القطع المؤهلة. ضع القيود الدقيقة في سياق filter، واجعل ملاءمة النص الكامل في سياق الاستعلام الذي يحسب الدرجات. يتجاهل سياق التصفية الدرجات، لكن ذلك لا يعني أن كل شرط سيُخزَّن مؤقتاً تلقائياً أو أنه بلا تكلفة. فإمكان التخزين وفائدته الفعلية يعتمدان على الاستعلام والحمل. اكتب متطلب المنتج بلغة واضحة بجانب DSL، حتى يستطيع المراجع التأكد من صحة المجتمع المؤهل قبل مناقشة قيم التعزيز.

استخدم الحقول وفق تعيينها

يخص جسم الطلب أدناه POST museum-artifacts-v1/_search. يحلل match نص البحث في العنوان، ويفحص term قيمة status الدقيقة من نوع keyword، ويطبق range حدوداً رقمية على year. ليست هذه الشروط اختصارات متبادلة لمطابقة السلاسل. يستهدف term على حقل text محلل مصطلحاً مفهرساً، بينما لا ينشئ match على keyword نموذج المصطلحات نفسه الذي ينشئه حقل text. تحقق من أسماء الحقول وأنواعها في التعيين الفعلي. المتوقع هنا هو مجتمع النتائج المؤهلة فقط؛ أما درجات الملاءمة الدقيقة فتتطلب تشغيل المحرك ولا تُختلق في هذا المثال.

json مثال تقني توضيحي؛ النتائج المنطقية مستنتجة ولم تُختبر على المحرك.
{"query":{"bool":{"must":[{"match":{"title":"bronze compass"}}],"filter":[{"term":{"status":"displayed"}},{"range":{"year":{"gte":1800,"lt":1900}}}]}}}

لا تتأهل إلا عناوين مطابقة بحالة displayed وسنة من القرن التاسع عشر. ويستخدم match سلوكه الافتراضي الموثق في الجمع بين المصطلحات ما لم يُضبط صراحة.

قد تكون الشروط المرغوبة اختيارية فعلاً

إذا احتوت bool شروط should فقط، فإنها تتطلب عادة تحقق شرط واحد منها على الأقل. أما إذا وُجد must أو filter أيضاً، فتكون القيمة الافتراضية لـminimum_should_match صفراً. لذلك قد تحوّل إضافة شرط للحالة متطلباً يبدو أنه يفرض أحد بدائل العنوان إلى مجرد تعزيزات اختيارية للدرجة. صرّح بـminimum_should_match عندما يجب تحقق بديل واحد. وميّز بين «تُفضّل هذه المواد» و«يجب أن تكون المادة واحدة منها». لا يجوز لتغيير الملاءمة أن يوسع الوصول أو أهلية المخزون عرضياً. اختبر مستنداً يحقق الحالة المطلوبة ولا يحقق أياً من البدائل لكشف هذا الخطأ.

json مثال تقني توضيحي؛ النتائج المنطقية مستنتجة ولم تُختبر على المحرك.
{"query":{"bool":{"filter":[{"term":{"status":"displayed"}}],"should":[{"term":{"material":"bronze"}},{"term":{"material":"brass"}}],"minimum_should_match":1}}}

يفترض المثال أن material من نوع keyword. يجب أن تكون القطعة معروضة، وأن تكون مادتها bronze أوbrass أيضاً؛ فلا تمثل البدائل تعزيزات اختيارية فحسب.

الاستبعاد ليس إثبات وجود

يستبعد must_not المستندات التي تحقق شرطه. وقد يمر مستند بلا status مفهرسة من شرط must_not status=withdrawn، لأنه لا يطابق القيمة المحظورة. إذا كانت الحالة المعروفة مطلوبة، فأضف شرط الأهلية الموجب أو شرط exists مقصوداً. ويتعلق exists بالقيم المفهرسة، لا بمجرد مفتاح ظاهر في _source؛ إذ تؤثر NULL والمصفوفات الخالية والقيم المتجاهلة وسلوك التعيين في النتيجة. افصل وجود الحقل في المصدر، ووجود قيمة مفهرسة، واكتمال بيانات الأعمال. نادراً ما تكفي قاعدة سلبية وحدها لوصف سياسة نشر كاملة لمجموعة المقتنيات.

تحقق من هيئة الاستعلام قبل ضبط الدرجات

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

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

يوسع شرط تصفية جديد مجموعة النتائج على غير المتوقع

لماذا يحدث؟
أدت إضافة filter إلى جعل المتطلب الافتراضي لشروط should صفراً.
كيف تصلحه؟
حدد minimum_should_match المقصودة صراحة.
كيف تتجنب تكراره؟
اختبر مستنداً يحقق شروط التصفية ولا يحقق أياً من البدائل.

تفشل مطابقة الحالة الدقيقة

لماذا يحدث؟
تختلف القيمة أو حالة الأحرف أو تمثيل الحقل عن عقد keyword.
كيف تصلحه؟
افحص التعيين وقيم الحالة المعتمدة.
كيف تتجنب تكراره؟
طبّع المفردات المضبوطة أثناء الإدخال، ووثّق حالة أحرفها الدقيقة.

تمر المستندات ذات الحالة الغائبة من الاستبعاد

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

اختبر فهمك

1. تحتوي bool شرط displayed في filter وبديلَي مادة في should. هل يجب تحقق مادة منهما إذا لم يُحدد حد أدنى صريح؟

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

لا. عندما يوجد filter، تكون minimum_should_match الافتراضية صفراً. اضبطها على واحد إذا كانت إحدى المادتين إلزامية. وإذا كانتا مجرد تفضيل، فقد يصح الصفر، لكن وثّق هذا المقصد واختبر قطعة معروضة لا تنتمي إلى أي من فئتَي المادة.

2. هل يضمن must_not withdrawn وجود حالة نشر معروفة ومسموحة؟

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

لا. يمكن أن يمر من هذا الاستبعاد مستند بلا حالة مفهرسة. اشترط الحالة الموجبة المعتمدة أو قاعدة اكتمال أخرى صريحة. وافحص التعيين إذا جاء سلوك exists غير متوقع، لأن وجود مفتاح بقيمة NULL في المصدر لا ينشئ بالضرورة قيمة مفهرسة.

أهم ما تعلمته

  • استخدم الدرجات للملاءمة وشروط التصفية الموجبة للأهلية.
  • تمنع متطلبات should الصريحة تغير المعنى بصمت.

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