محرك البحث

يشمل SPIP محرك بحث معطّل افتراضياً. عندما يتم تفعيله من قبل احد المدراء في صفحة الاعداد، يتيح القيام بعمليات بحث تشمل انواع مختلفة من المعلومات الموجودة في قاعدة البيانات: المقالات والاقسام والاخبار والمفاتيح والمؤلفون. ومنذ SPIP 1.7.1 تتم كذلك فهرسة خيوط النقاش (threads) في المنتديات وتوقيعات العرائض

المبدأ

هناك طريقتان اساسيتان لبناء محرك بحث. الطريقة الاولى هي بناء محرك يبحث ببساطة في نوع التخزين الموجود (ملفات HTML او قواعد بيانات... حسب نوع الموقع). هذه الطريقة بطيئة جداً لأن نوع التخزين ليس مطوراً في الاساس لهذا الغرض.

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

من جهة اخرى، وفي ما يتعلق بنظام SPIP، نحن مضطرون لاستخدام PHP وMySQL كما نفعل للوظائف الاخرى، مما لا يسمح بتطوير محرك بحث قوي جداً. لذلك يتم تعطيل المحرك افتراضياً مما يحتم على احد المدراء تفعيله اذا اراد: فقد يتسبب بإبطاء الموقع بعض الشيء (انظر لاحقاً فقرة الاداء لمزيد من المعلومات). ويستحسن، اذا كان لا بد من محرك قوي، استخدام محرك بحث حقيقي (يمكن، مثلاً استخدام ht ://Dig وهو محرك قوي ويخضع لترخيص البرامج الحرة).

الفهرسة

تتم الفهرسة خلال زيارة الموقع العمومي. ولتفادي اضافة الفهرسة على اعادة انعاش الصفحة مما قد يؤدي الى نفاذ الوقت (timeout في اجهزة الخدمة البطيئة، ينتظر SPIP حتي يتم عرض صفحة ما بواسطة الذاكرة المخبأة [1].

تقوم الفهرسة بمعالجة المكونات النصوصية في مادة ما كل واحد على حدة: فمثلاً، في ما يتعلق بالمقال، تتم معالجة المقدمة والوصف والعنوان والمادة... ولكل مكوّن، يتم حساب علامة كل كلمة بإحصاء عدد المرات التي تظهر فيها الكلمة.

بعد ذلك يتم جمع علامات كل كلمة وتثقيل هذا الجمع حسب نوع المكونات التي ظهرت فيها الكلمة. ويتيح التثقيل مثلاً، اعطاء وزن اكبر للكلمات الموجودة في العنوان مقارنة بتلك الموجودة داخل المادة او في الملحوظة.

يمكن مراجعة دالة الفهرسة في الملف ecrire/inc_index.php3. ولتوضيح عملية الفهرسة اكثر، يمكنك فتح ملف ecrire/data/spip.log او الاطلاع على الصفحة ecrire/admin_index.php3 (ملاحظة: لا تزال هذه الصفحة تجريبية ولا يتم توزيعها مع كل اصدارات SPIP ولا تتوافر الا بالفرنسية).

في الاصدار [SPIP 1.6]، دخل الكثير من التعديلات على اداء محرك البحث:
 تصرف افضل في بيئة متعددة اللغات.
 الخط التحتى (ـ) لم يعد يعتبر فاصلاً بين الكلمات بل صار حرفاً ابجدياً (وهذا مفيد اذا كانت المادة تتحدث عن الكومبيوتر مثلاً).
 الكلمات المؤلفة من احرف كبيرة (اثنان او اكثر) وارقام تعتير لفظات اوائلية وتتم فهرستها مما يلغي احدى اكبر سيئات المحرك (فكلمات مثل G8 او UN او IBM صارت تدخل الفهرسة).

البحث

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

الاداء

السرعة

في جهاز خدمة جديد ولا يخضع للكثير من الضغط، تستغرق فهرسة نص طويل (عشرات الآلاف من الكلمات) بين الثانية والثانيتين: ففترة الانتظار تكاد تكون غير ملحوظة مقارنة بفترات انتظار تحميل الصفحات عبر الشبكة. اما المواد القصيرة، فتتم فهرستها بشكل فوري. بالطبع تخضع هذه التقديرات لحجم الموقع. فإذا كان الموقع كبيراً جداً قد يزداد وقت الفهرسة قليلاً. ولوضعك في سياق نسبي، فإن موقع مثل Le Courrier des Balkans يحتوي حتى تاريخ كتابة هذه السطور على 3800 مقال واكثر من 7500 مشاركة منتدى ولم يبدي محرك SPIP اي عناء خلال عمليات البحث.

من جهة اخرى، احصائياً، يمكننا القول انه لن تتم فهرسة اي مادة اكثر من مرة واحدة: وباعتبار ان عدد الزيارات للموقع يتعدى عدد المرات التي يتم فيها تحديث محتوى هذا الموقع، نستطيع الجزم بأن زيادة الضغط على جهاز الخدمة تكاد تكون معدومة (الا اذا كان هذا الجهاز ضعيفاً جداً).

الجودة

ان جودة الفهرسة لا تعادل جودة محركات البحث المتخصصة. فمن المعروف ان PHP هي لغة بطيئة نسبياً وبالتالي فقد تم تبسيط مرحلة استخراج الكلمات قدر الامكان لتبقى اوقات الفهرسة منخفضة قدر الامكان. وهكذا فإن بيانات الفهرسة تحتوي على بعض «الفضلات». اي بعض اجزاء نصوص لا تعود الى كلمات «حقيقية» ولكنها تمت فهرستها على هذا الاساس (عادة ما تكون مواد تقنية مثل اسماء ملفات او فقرات غير صحيحة الترقيم). ويحملنا مثال موقع uZine (حيث تصل نسبة هذه «الفضلات» الى 2٪ تقريباً) على الاعتقاد بأن كمية هذه البيانات لا تذكر لا سيما وانها من غير المحتمل ان تدخل في نتائج اي بحث.

اما في ما يتعلق بالبحث نفسه فهو ببساطة اضافي (اي يعمل بالجمع): فلا يوجد اي عامل بولياني والعامل الذي يقترب الاكثر الى عملية البحث هو «او» المنطقي. غير انه منذ SPIP 1.7.1، يتم عرض المقالات التي تم العثور عليها بترتيب يميّز النتائج التي تحتوي اكبر عدد من الكلمات المشابهة اكثر لما ادخله المستخدم في مربع البحث. مثلاً، فإن بحثاً حول «الخد الاحمر» سيضع المقالات التي تحتوي على «يد» و«احمر» في مرتبة اعلى من المقالات التي تحتوي «الخدود» او «الاحمرار» والتي تظهر ولكن في اسفل القائمة.

مساحة القرص

لم يتم تطوير MySQL لتخزّن بيانات فهرسة، لذلك يؤدي استخدام محرك البحث الى تضخيم المساحة التي تحتلها قاعدة البيانات على القرص الثابت. ولتوضيح ذلك نقول ان اي مادة تولّد بيانات فهرسة يتراوح حجمها بين حجم المادة نفسها وضعف هذا الحجم. بالتالي فإذا تجاهلنا المواد التي لا تولّد بيانات فهرسة (كالمنتديات مثلاً)، نستطيع القول ان الفهرسة تؤدي الى زيادة حجم قاعدة البيانات بين الضعفين والثلاثة اضعاف. وقد يكون ذلك مزعجاً اذا كانت المساحة المخصصة لموقعك صغيرة.

اما اذا قمت بإبطال محرك البحث لتوفير مساحة القرص الثابت فلا تنسى حذف بيانات الفهرسة (في صفحة نسخ احتياطي \ استرجاع القاعدة) لاسترجاع المساحة التي كانت هذه البيانات تحتلها.

حواشي

[1هكذا، اذا اعطيت كل متغيرات $delais قيمة صفر او اذا كان الموقع لا يستقبل الزوار لن تتم الفهرسة.

مؤلف George نُشر في: تم التحديث: 26/10/12

الترجمات: عربي, català, English, Español, français, italiano, Nederlands, українська