في هذا المقال الجديد و كبداية لتوجه جديد في مدونتي بالموازاة مع ماأكتبه عن روبي أون رايلز، قررت الكتابة عن Lucene. هذا التوجه له دافع مباشر في الحقيقة وهو طبيعة أعمالي في مجال البحث و التي تدور حول محرك بحث طبي، و طبيعة مذكرتي في الدكتوراه و التي دارت حول كل ما يتعلق بمجال المعالجة الآلية للغة و كل مايتعلق بالمكنزات الطبية. على كل حال دعوني أبدأ في مقالي المخصص لlucene و كما عودتكم من جانب تقني أكثر منه “صحفي”.
Lucene عبارة عن مكتبة برمجية مفتوحة المصدر مطورة بالجافا و متوفرة بلغات برمجة أخرى، والهدف منه إضافة وظائف بحث و فهرسة داخل تطبيقاتكم. المشروع Lucene تتبناه The Apache Software Foundation. المكتبة لا تحتوي على أدوات يمكن إستعمالها مباشرة لفهرسة البيانات لهذا فإنه يجب المرور عبر البرمجة و الكود لوضع حجر الأساس من أجل إنشاء محرك بحث داخل النصوص.
المبدأ :
Lucene يسمح بفهرسة الوثائق أو المستندات. المستندات عبارة عن مجموعة ملفات Excel, Word, PDF أو HTML, و لكن أيضا مجموعة من البيانات منظمة على مجموعة من الحقول. الحقل هو عبارة عن معطى يحتوي على إسم سواء كان هذا الإسم عنوان أو تاريخ النشر أو محتوى المعطى و الذي يُربط بنص، بحيث أن هذا النص هو الذي يُفهرس ثم نقوم بالبحث فيه. مجموعة النصوص تُجمع فيما بعد داخل مجموعة من النصوص تُسمى الفهرس. الفهرس يُمكن أن يحتوي على مئات، آلاف أو ملايين النصوص و يمكننا إنشاء عدد من الفهارس مختلفة حسب إختلاف الإحتياجات. فعليا، الفهرس عبارة عن ملف يقوم lucene بإنشاءه.
الحصول على Lucene و إستعماله:
النسخة الحالية هي النسخة 4.0 و هي متوفرة هنا. الملف من نوع .zip وهو يحتوي علي جميع المكتبات التي نحتاجها من أجل إستخدام مختلف الوظائف التي يقترحها. في باقي المقال سوف أعرض مثال مُبسط بالجافا حول كيفية إستخدام معظم الوظائف الرئيسية المتوفرة. أول شيئ يُمكن القيام به هو إنشاء مشروع جديد و إدخال أهم المكتبات الرئيسية الموجودة التي تم الحصول عليها، شخصيا أستعمل Eclipse من أجل البرمجة بجافا و أستخدم أيضا النسخة 1.6 من جافا و لكن النسخة 1.5 يمكن إستعمالها من غير مشاكل.
من النظري إلى التطبيق :
المثال التالي عبارة عن مشروع مكون من فئة (class) واحدة فقط و لكن يمكن تقسيمه إلى قسمين فهرسة و بحث. قبل البدأ بسرد المثال أنوه أن البيانات التي سنقوم بتداولها عبارة عن أسطر بسيطة و لا تعبر عن بيانات من الحياة العملية و لكن كافية لتشغيل المثال.
فهرسة البيانات (Indexation) :
أول مرحلة يجب القيام بها هي تهيئة البيانات و إنشاء الفهرس للبحث عليه فيما بعد. من أجل ذلك فإن المكتبة توفر الفئات التي تسمح لنا بإنشاء الفهرس. أهم هذه الفئات هي الفئة IndexWriter و التي تسمح لنا بالتعامل مع الفهرس و الكتابة فيه : إنشاء الفهرس، إضافة مستند، … الفئة الأخرى هي الAnalyzer والتي تحتوي على الفئات التي تسمح بتقسيم النص إلى كلمات و من ثم تحديد ساق الكلمة، من أهم الفئات التي تُوفرها يمكن ذكر :
- SimpleAnalyzer : يٌقسم النص إلى كلمات ثم يُحولها إلى شكلها المصغر.
- StopAnalyzer : يٌقسم النص إلى كلمات، يُحولها إلى شكلها المصغر ثم يحذف الكلمات الفارغة أي الكلمات التي ليست لها فائدة كبيرة عند عملية البحث.
- StandardAnalyzer : عبارة عن نسخة كاملة تحتوي علي خصائص الفئتين السابقتين.
فئة أخرى يمكن التنويه إليها هي الفئة Document و التي تمثل أصغر محتوى. على سبيل المثال، فهرسة كل الملفات Word داخل مجلد سيضيف إلى الفهرس Lucene مسند Document يُمثل كل ملف. وبالتالي لائحة النتائج التي يُرجعها البحث داخل الفهرس عبارة عن لائحة Documents. بدوره الDocument مُكون من ما نسميه Field أو الحقول و هي عبارة عن مجموعة فرعية من الDocument. الحقول المتداولة بكثرة هي : العنوان، المؤلف، تاريخ النشر …وهلم جر.

البحث (Search) :
البحث يستلزم إستعمال ستة فئات :
- IndexSearcher : هي الفئة التي تسمح باستعمال فهرس البحث.
- Analyzer : مثل الفهرسة فإن فئات تحليل النصوص يدخلن في عملية البحث من أجل تحليل الكلمات المستعملة في البحث.
- QueryParser : من أجل تحليل كلمة البحث و تحويلها إلى سؤال مفهوم لLucene.
- Query : عبارة عن كائن (object) يمثل سؤال المستخدم والذي سوف يستعمل من طرف IndexSearcher.
- Hits : عبارة عن لائحة النتائج للبحث.
- Hit : عضو من اللائحة.
و أخير الDocument والذي يمثل المسند كما تمت فهرسته.

في الأخير، لو تنجحون بتشغيل المثال : الفهرسة ثم البحث فإن النتيجة التي تُظهرها الشاشة عبارة عن كل الأسطر التي تمت فهرستها و التي تحتوي على الكلمة “lucene”.