2: بناء الفهارس – لوسين Building Indexes

السلام عليكم ورحمة الله وبركاته

lucene

نتابع موضوعنا حول البحث ضمن قاعدة المعطيات باستخدم تقنية ومكتبة لوسين, التي تعتمد على تحويل محتويات قاعدة المعطيات إلى ملفات كاش, يتم البحث ضمنها بسرعة وفعالية كبيرة.

سنتحدث اليوم عن كيفية بناء الفهارس building indexes

إنشاء فهرس جديد Create New Index

تتوفر كل من امكانيات إنشاء وبناء الفهارس وتعديلها ضمن مكتبة لوسين. ويمكن الاستفادة من هذه الامكانيات لبناء وتعديل والبحث ضمن الفهارس الخاصة بنا.

الترميز ادناه يوضح لنا مثال على فهرسة ملف وذلك باستخدام واجهة التطبيقات البرمجية التي توفرها لنا مكتبة لوسين Zend_Search_Lucene indexing API

1

تصبح الوثائق documents قابلة للبحث فور اضافتها للفهرس.

تعديل الفهرس Updating Index

يتم استخدام نفس الإجراء السابق لتعديل الفهرس. الفرق الوحيد يكمن في استخدام التابع Open() method بدل من استدعاء التابع create() method:

2

تعديل الوثائق Updating Documents

لا تدعم لوسين امكانية تعديل الوثائق بعد اضافتها.

لذلك عندما نرغب بتعديل وثيقة, يتوجب علينا :

  1. البحث عنها
  2. حذفها
  3. اضافة الوثيقة الجديدة بعد التعديل.

يعمل التابع

Zend_Search_Lucene::delete()

على المعرف الداخلي للوثيقة internal index document id.

ويمكن استعادة هذا المعرف id وذلك عبر البحث عن الوثيقة باستخدام الاستعلام عنها query , ومن ثم من نتائج البحث hit نصل الخاصية id .

كما هو موضح في المثال التالي ادناه

3

معرفة حجم الفهرس retrieving index size

هنالك طريقتان لاستعادة ومعرفة حجم الفهرس ضمن مكتبة لوسين Zend_Search_Lucene.

لدينا التابع التالي :

Zend_Search_Lucene::maxDoc()

يعيد لنا عدد اكبر من العدد المحتمل للوثائق الموجودة ضمن الفهرس.

فعليا, يعيد التابع العدد الاجمالي للوثائق ضمن هذا الفهرس, يما يتضمن الوثائق المحذوفة.

ويوجد تابع مكافئ لهذا التابع ويدعى :

Zend_Search_Lucene::count().

اما التابع الثاني هو التالي:

Zend_Search_Lucene::numDocs()

ويعيد العدد الاجمالي للوثائق الغير محذوفة ضمن الفهرس.

4

يمكن استخدام التابع التالي :

Zend_Search_Lucene::isDeleted($id)

لمعرفة فيما اذا تم حذف وثيقة ام لا.

5

من الضروري ايضا القيام بامثلة الفهرس index optimization , لانها عملية الامثلة تقوم بعدد من الامور الضرورية مثل:

  • ازالة الوثائق المحذوفة من الفهرس
  • تقليص مجال معرفات الوثائق documents’ Ids إلى مجال اصغر.

وبناء على ذلك نلاحظ بان معرف الوثيقة الداخلي internal document id عبارة عن رقم ممكن ان يتغير خلال القيام بامثلة الوثيقة index optimization.

امثلة الفهرس Index optimization

يتألف فهرس لوسين من مجموعة من القطاعات segments.

كل قطاع segment عبارة عن مجموعة مستقلة من المعطيات.

إن عملية تعديل قطاع ما segment تتطلب اعادة تنظيم كل القطاعات.

بشكل عام تتم اضافة الوثائق documents إلى الفهرس عبر إنشاء قطاعات جديدة.

إن زيادة عدد القطاعات segments تودي إلى تردي جودة الفهرس, ولكن عملية امثلة الفهرس index optimization تؤدي إلى استعادة الجودة مرة اخرى.

تقوم عملية الأمثلة بشكل اساسي بدمج عدة قطاعات ضمن قطاع واحد. وهذه العملية بحد ذاتها لا تؤدي إلى تعديل القطاعاتsegments . وانما تنتج قطاعات جديدة كبيرة, وتقوم بتحديث قائمة القطاعات segment list (ما يعرف بملف القطاعاتsegments’ file ).

يمكن تنفيذ عملية امثلة كاملة للفهرس index optimization وذلك عبر استدعاء التابع

Zend_Search_Lucene::optimize().

حيث يقوم هذا التابع بدمج كل قطاعات الفهرس index segments ضمن قطاع وحيد جديد.

6

يجب القيام بشكل اوتوماتيكي بأمثلة الفهرس index optimization , وذلك من اجل الحفاظ على الفهارس بشكل مستقر ومتجانس.

الامثلة الاوتوماتيكية للفهرس automatic index optimization عبارة عن اجرائية تكرارية يتم التحكم بها عن طريق خيارات الفهرس index options. تقوم هذه العملية بدمج القطاعات الصغيرة small segments ضمن قطاعات اكبر, ومن ثم تعود فتدمج هذه القطاعات الكبيرة إلى قطاعات اكبر, وهكذا.

سنتطرق فيما يلي لعدد من خيارات الامثلة الاوتوماتيكية auto-optimization options.

MaxBufferedDocs auto-optimization option

MaxBufferedDocs : يحدد لنا العدد الادنى المطلوب من الوثائق قبل البدء بكتابة الوئائق المخزنة ضمن الذاكرةbuffered in-memory documents إلى قطاع جديدnew segment .

يمكن استعادة قيمة MaxBufferedDocs او تعديلها عبر استخدام التوابع التالية :

$index->getMaxBufferedDocs()

$index->setMaxBufferedDocs($maxBufferedDocs)

القيمة الافتراضية تبلغ 10.

MergeFactor auto-optimization option

MergeFactor : ويحدد التردد الذي يتم وفقه دمج قطاعات الفهارس segment indices عبر التابع

addDocument().

عند القيم الصغيرة: يتم استهلاك ذاكرة RAM اقل اثناء الفهرسة, ولكن الفهرسة تكون ابطأ.

اما عند القيم الكبيرة : يتم استهلاك ذاكرة RAM اكبر اثناء الفهرسة, وعملية الفهرسة اسرع.

القيم اكبر من (10) تعتبر القيم الأفضل في عمليات انشاء الفهرس لكل المعطيات مرة واحدة, اما القيم الصغيرة , اصغير من (10) تستخدم لعمليات الفهرسة التفاعلية المستمرة.

MergeFactor : يعطينا تقدير جيد لوسطي عدد القطاعات التي يتم دمجها لقطاع واحد اثناء عملية تكرارات عملية الامثلة الاوتوماتيكية auto-optimization pass.

القيم الكبيرة تسبب عدد كبير من القطاعات segments وبالتالي لا يتم دمج هذه القطاعات ضمن قطاع واحد جديد.

وربما قد تكون سبب رسالة الخطأ التالية : “failed to open stream: Too many open files” .

يمكن استعادة او تغيير قيمة MergeFactor عبر استخدام التوابع التالية :

index->getMergeFactor()

index->setMergeFactor($mergeFactor)

القيمة الافتراضية تبلغ 10.

الصلاحيات Permissions:System-Security-2-icon

بشكل افتراضي, يكون الفهرس متاحا للقراءة والكتابة لكل الاشخاص.

من الممكن تعديل هذه الصلاحية عبر استخدام التابع التالي :

Zend_Search_Lucene_Storage_Directory_Filesystem::setDefaultFilePermissions()

7

المحدوديات limitations

حجم الفهرس limitationsindex size

الحد الاعلى لحجم الفهرس ضمن منصات العمل 32-bit يبلغ 2 غيغا.

يمكن استخدام منصات عمل 64-bit من اجل فهارس ذات احجام اعلى.

دعم نظم الملفات المختلفة Supported Filesystems
تستخدم لوسين التابع Zend_Search_Lucene من اجل تأمين امكانيات البحث والتعديل والامثلة المتزامنة.

ولكن تبعا لتوثيق PHP. فإن التابع flock() لن يعمل على نظم NFS والعديد من نظم الملفات الشبكية الاخرى networked file systems.

نكتفي بهذا القدر في هذه الحلقة, لنتابع في الحلقة القادمة ان شاء الله موضوعنا لنتطرق للحديث عن عملية البحث ضمن الفهرس Searching an index

إلى اللقاء في الحلقة القادمة من هذه السلسلة

وإلى ذلك الحين نستودعكم الله والسلام عليكم ورحمة الله وبركاته

 

مراجع:

 

Advertisements

, , , , , , , ,

  1. أضف تعليق

اترك رد

Please log in using one of these methods to post your comment:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: