Read this page in English
→ سجل المشروع

محرك بحث واحد للموقع وواجهة البرمجة وخادم MCP

منذ 7 تشرين الثاني يتشارك الموقع وواجهة البرمجة وخادم MCP بحثاً واحداً ينفّذه PostgreSQL وحده. انخفض أبطأ سؤال من 30 سؤالاً حقيقياً من 4,835 إلى 624 ميلي ثانية.

الجواب باختصار.

كان هناك بحثان: واحد للموقع ولواجهة البرمجة، وآخر لخادم MCP يحتفظ بنسخ من النصوص في ذاكرة الخادم. منذ 7 تشرين الثاني صار هناك بحث واحد، ينفَّذ في PostgreSQL وحده. على 30 سؤالاً حقيقياً، وعلى نسخة من البيانات، انخفض وسيط صفحة البحث من 401 إلى 296 ميلي ثانية وأبطأ سؤال فيها من 4,835 إلى 624.

قياس كل أداة، لا نقطة الاتصال.

بدت نقطة اتصال MCP سليمة: المئين 95 نحو 350 ميلي ثانية. لكن هذا الرقم كان يحتسب كل الطلبات، ومعظمها مصافحات وطلبات لائحة الأدوات، نحو 41,000 في الأسبوع. أما لكل أداة فالصورة مختلفة. خلال سبعة أيام نُفّذت search_legislation 785 مرة بوسيط 230 ميلي ثانية، ومئين 95 يبلغ 2.6 ثانية، ومئين 99 يبلغ 5.0 ثوانٍ. تجاوز 185 طلباً الثانية الواحدة وانتهت مهلة 12 طلباً.

إصلاح استبدلناه في الليلة نفسها.

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

أعداد كلمات يصنعها البناء.

الترتيب الجيد يعطي الكلمات النادرة وزناً أكبر من الشائعة، فعليه أن يعرف كم نصاً يحتوي كل كلمة. صار بناء قاعدة البيانات يكتب ذلك في search_term، وهو materialized view، مع حجم كل فهرس ومتوسط طول النص فيه. وطول كل نص عمود مخزّن. يقرأ البحث هذه الأرقام ولا يعدّ شيئاً. بها انخفض وسيط 30 سؤالاً حقيقياً على MCP من 71 إلى 45 ميلي ثانية، والأبطأ من 1,544 إلى 367.

النصوص التي تحتوي كل الكلمات أولاً.

تأتي أولاً النصوص التي تحتوي كل كلمات السؤال. ثم النصوص التي ينقصها أكثر الكلمات شيوعاً فقط، ويقول الردّ partial_match: true. تطابق كل كلمة أيضاً جذعها وصيغتها من دون واو أو فاء في أولها، في الاستعلام نفسه: «والخامسة» تجد «الخامسة». سابقاً كان السؤال الذي لا يجد مطابقة كاملة يُعاد حتى اثنتي عشرة مرة بقراءات مختلفة، بحثاً بعد بحث.

العناوين تطابق المكتوب.

لم تعد العناوين تُطابَق بالجذع، لأن «الغابات» و«الغابون» يتشاركان جذعاً واحداً. يطابق العنوان الكلمة كما كُتبت، من دون أداة التعريف في أولها، أو كبداية لكلمة أطول. والكلمة المكتوبة في العنوان تُحتسب أكثر من مرادفها أو من نوع النص، وعند التعادل يتقدم النص الأحدث.

الفرنسية من دون حركات.

صار البحث بالفرنسية يتجاهل علامات الحروف: ecrit تجد écrit، في الموقع وواجهة البرمجة وخادم MCP. والصيغة الخالية من العلامات عمود يكتبه البناء، لا شيء يحسبه كل بحث.

المصادر

استخدم المكتبة