أعجوبة

البرمجيات الحُرة والمفتوحة المصدر

أدوات المستخدم

أدوات الموقع


thawab:search

دراسة محركات البحث

نظرة عامة وفهم المصطلحات

إن أي محرك بحث أو نظام IR أي نظام استخراج المعلومات Information Retrieval system يتكون من مراحل منفصلة هي

  • حفظ المحتوى وفي حالتنا نحن حفظ المحتوى في ملفات SQLite منفصلة
  • مرحلة تلقيم المحتوى للفهرسة وهي تتم مرة واحدة (ما لم يتغير المحتوى)
  • الاستعلام وهو أن يطلب المستخدم البحث عن شيء ما ويجب أن يعيده النظام مرتب وفق تقييم rank لمدى الارتباط Relevance

يقسم النظام المحتوى إلى عدد من الوحدات الجوهرية تسمى كل منها وثيقة Document ويكون بها عدد من الحقول Fields أحدها معرف فريد (رقم أو URL …) وفي حالنا الوثيقة الواحدة هي الفصل أو الباب في الكتاب (أو الحديث في كتب الحديث أو الراوي في كتب الرجال …) ونميزه عبر وسم “تبويب” وهنا نحفظ معرفه ومعرف الكتاب

الحقول المختلفة في إما أن تكون حقول محللة 1) أو حقول جامدة فالحقول الجامدة التي لا يتم قصها ولا تجذيعها أما الأولى فيتم تقطيعها عند المسافات ويتم قص السوابق واللواحق …إلخ

بعض الحقول يتم الاحتفاظ بها كما هي دون معالجة داخل الفهرس مثل المعرف وربما جزء ملخص من النص (أول فقرة مثلا ويسمى excerpt أو snippet) وبعضها الآخر لا يتم الاحتفاظ بها مثل النص نفسه لأنه كبير جدا لكن في المقابل يمكن في هذه الحالة الاحتفاظ بما يسمى Term Vector أي متجه الحدود 2) وهو معرّف كل كلمة وتكرارها وإزاحتها (وبالتالي ترتيبها) وحيث أن الوثائق المختلفة تستخدم نفس الكلمات يوفر الاحتفاظ بالمتجه المساحة ويقدم معلومات أكثر للفهرس. للمزيد من المعلومات انظر Vector Space Model

الاستعلام الثنائي هو أن يتم طلب كل الوثائق التي تحقق شرط مركب من عمليات ثنائية مثل

  • “و” AND
  • “أو” OR
  • “وليس” AND NOT

مثلا البحث عن “أنس” و “بن” و “مالك” يُحضر كل الوثائق التي تحتوي هذه الحدود معا.

الاستعلام عن عبارة فهو البحث عن “أنس بن مالك” متتابعة حيث يكون الانحدار بين الحدود صفر (الانحدار هو أعلى قيم مسموحة لعدد الحدود التي تفصل بين الكلمات) ويمكن تحديد قيمة عليا للانحدار مع تفضيل الأقصر.

البحث عن عبارات مشابهة أو ما يسمى البحث الضبابي في مصطلح lucene هو البحث عن وثائق تقل فيها مسافة التحرير المحسوبة بخوارزمية ليفنشتاين Levenshtein algorithm عن الحد المطلوب وهي أقل عدد من العلميات لتحويل العبارة الأولى إلى الثانية من بين العمليات التالية:

  • إضافة حرف
  • حذف حرف
  • تعويض حرف مكان آخر

مثلا التحرير بين “kitten” و “sitting” هي 3 حيث نحتاج لتحويل k إلى s ثم تحويل e إلى i ونضيف g وعملية إيجاد الرقم معروفة بخوارزمية رياضية على المصفوفات دون تجريب

وفي lucene يمكن أن نستعلم عن الوثائق المشابهة لعبارة ونقدم رقم بين 0 و 1 مثل 0.6 وهو رقم يضرب في طول الاستعلام

ويقدم محرك lucene طريقة للجمع بين هذه الأنواع حيث يقدم المستخدم الباحث سلسلة نصية يتم إعرابها عبر QueryParser وتجد توثيق لها في query parser syntax مثلا يمكن أن يطلب أحدهم البحث عن “الخط العربي”~10 تعني أن لا تزيد الحدود الفاصلة بين الكلمتين عن 10 حدود و roam~0.6 تعني كلمة تشبه roam بمقدار 60% أي مقدار مسافة التحرير لا تزيد عن 1.6 حرف

المزيد:

الكلمات المهملة stopwords

الكلمات المهملة أو المستبعدة stopwords هي الكلمات ذات التكرار العالي وليس لها دلالة خاصة مثل حروف الجر والأدوات. وهذه يتم إهمالها في أغلب محركات البحث ومن أمثلتها كلمة from (والتي تعني من) و كلمة to (والتي تعني إلى) ولان ههذه الكلمات تتكرر كثيرا فإن اهمالها يؤدي إلى تقليل حجم فهرس البحث (وبالتالي قد ينعكس هذا على زيادة السرعة وتقليل استهلاك الذاكرة) لكن الهدف من إهمالها ليس التوفير بل هو إهمال تطابقات غير مرغوبة مثلا عند البحث عن “سلم من لسانه” وكان الرابط هو علاقة “أو” هذا يعني أن نص وردت فيه كلمة “من” كثيرا أهم من نص وردت فيه كلمة “لسان” مرات قليلة مع أننا لا نهتم بكلمة من قدر اهتمامنا ببقية الكلمات. طبعا خوارزميات تقييم النتائج المختلفة مثل idf تقلل من هذا الأثر السلبي بشكل تلقائي دون الحاجة للكلمات المهملة حيث أنها تقيس أهمية الكلمة نسبة لتكرارها في كل الوثائق وحيث أن كلمة مثل “من” تتكرر كثيرا مما يجعل نسبتها في أي وثيقة رقم صغير مهمل.

في اللغة العربية أرى أنه لا يوجد حاجة لإهمال مثل هذه الكلمات مثلا لو أخذنا “من” قد تكون ناتجة من تجذيع “المن والسلوى” وكلمة “إلى” مقارنة مع إلينا …إلخ حيث أن الكلمات هذه يجب أن تكون منفصلة لا تقبل التصرف والإضافة. يمكن حساب الكلمات المستبعدة تلقائيا وذلك بأخذ عينة ممثلة من عدد كبير من الوثائق المتنوعة (وليس وثيقة واحدة) ثم إحصاء idf (أي التردد العكسي للوثائق inverse document frequency) لكل كلمة في العينة حيث تكون قيمته للكلمات المستبعدة قريبة من الصفر (يمكن أخذها أقل من قيمة معينة مثلا 0.25) ويحسب بالعلاقة:

idf=log(nD/nd)

أي لوغاريتم النسبة بين عدد كل الوثائق nD على عدد الوثائق التي يظهر فيها الحد nd. مثلا إن ظهرت الكلمة “في” في 100 وثيقة من أصل عينة مكونة من 100 وثيقة يكون لو(100/100) = لو 1 = 0 لكن إن ظهرت كلمة “حيث” في 99 وثيقة من أصل 100 وثيقة يكون لو(100.0 / 99.0) = لو 1.01 = 0.01

التجذيع stemming

إن طلبنا من محرك البحث معالجة الكلمات فإنها يرسلها لدالة التجذيع وهي دالة تسقط عدة قيم إلى نفس الصورة many to one transformation حيث ترسل كلمات مثل play و played و playing إلى نفس الصورة وهي في مثالنا play حيث أن البحث عن هذه يجب أن يقود لتلك. ليس بالضرورة أن تكون الدالة دقيقة حيث يفترض أن ترسل عدة كلمات غالبا ما تكون متعلقة ببعضها صرفيا إلى نفس الصورة

محرك البحث lucene يحتوي على عدة محللات للتجذيع والقياسي ليس أقوى محلل للقة الإنجليزية بل هناك Snowball حيث يقوم بما يلي بعد التقطيع القياسي:

  • StandardFilter
  • LowerCaseFilter - تحويل كل الحروف إلى صغيرة
  • StopFilter - إهمال الكلمات بعض الكلمات الإنجليزية
  • SnowballFilter - التجذيع وفق طريقة Snowball

وطريقة SnowBall في التجذيع طريقة فريدة حيث هي لغة خاصة لوصف خوارزميات التجذيع.

لكن لم وهناك عدد من الأمثلة للغة العربية لكنها غالبا من وضع معاهد من يعمل عليها لا يعلم شيء عن اللغة العربية

انظر التجذيع

ترتيب النتائج Ranking

بعد حصر التطابقات يتم تقييمها عبر عدة خوارزميات انظر scoring وهو تقييم يشبه حساب جتا الزاوية بين متجهين (من هنا جاء مصطلح متجه الحدود أي الكلمات الذي ذكرناه سابقا) حيث يكون جتا الزاوية يساوي 1 إذا تطابق المتجهين ويحسب جتا عن طريق الضرب بين مساقط الاستعلام والوثيقة مقسوما على طول كل منهما وهناك نموذج يبسط ذلك تستفيد منه lucene اسمه term frequency–inverse document frequency

أي حاصل ضرب tf وهو التكرار النسبي للحد في الوثيقة (أي مجموع تكرار الحد في الوثيقة td على مجموع تكرار الحد في كل الوثائق tD) في idf وهو مدى أهمية الحد عبر قياس لوغاريتم النسبة بين عدد كل الوثائق nD على عدد الوثائق التي يظهر فيها الحد nd

tf=sum(td)/sum(tD)
idf=log(nD/nd)

هذا للحد الواحد

وهناك خوارزمية أفضل اسمها Okapi BM25 وهي متوفرة في Lucene

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

( (k2 . nq) (1-L)/(1+L) ) +
 sum(for all t: ((k3+1)q.(k1+1)f / ((k3+q).(K+f))).log( (r+0.5)(N-n-R+r+0.5)/((n-r+0.5)(R-r+0.5))  )  )

حيث

  • t الحد term
  • q تكرار الحد في الاستعلام term within query frequency,
  • f تكرار الحد في الوثيقة term within document frequency,
  • n عدد الوثائق التي تحتوي الحد
  • N عدد كل الوثائق
  • r عدد كل الوثائق التي تتعلق بالحد t
  • R عدد كل الوثائق التي المتعلقة بالاستعلام
  • nq عدد الحدود في في الاستعلام
  • L طول الوثيقة النسبي (طول الوثيقة على متوسط طول الوثيقة وهو يساوي 1 للوثيقة متوسطة الطول)
  • b و k1 و k2 و k3 ثوابت
  • K ثابت يعتمد على L ويعطى بالعلاقة
K = k1(bL + (1-b))

المزيد:

محرك البحث Whoosh

محرك بحث مكتوب حصريا على بايثون وبالتلي يعمل على كل المنصات التي تعمل عليها بايثون

تكمن فائدة هذا المحرك هو سرعة التطوير ويمكن الاستفادة من وضوح كود بايثون في فهم خوارزميات البحث المختلفة

حيث أنه يوفر العديد منها مثل BM25 و tf-idf

وعند تجربته لم يكن يعمل مع اللغة العربية لكن تخصيصه كان أمرا سهلا فهو يوفر العديد من صنوف التقطيع

يقول الموقع أنه أقل سرعة من lucene إلا أن ذلك غير ملموس فقد استغرق الكود المبدئي أقل من دقيقة ونصف في فهرسة عينة من الكتب (بحجم 35.2 م.ب وهي بخاري ومسلم والموطأ والسلسلة الصحيحة ومقالة PyQt4 ومقالة للتجربة) وكان حجم الفهرس مقبولا جدا حيث وصل إلى حوالي 20% من حجم النص (7.1 م.ب) ربما السبب هو كثرة الحركات في النص حيث تهملها الفهرسة

أما سرعة الاسترجاع فهي شبه آنية إليك مثال

 ./WhSearchDb.py ترك الصلاة كفر
44
data/db/muslim.db:3014 بيان إطلاق اسم الكفر على من ترك الصلاة
data/db/muslim.db:85 بَاب   بَيَانِ إِطْلَاقِ اسْمِ الْكُفْرِ عَلَى مَنْ تَرَكَ الصَّلَاةَ
data/db/bukhari.db:4527 {  وَإِذْ يَرْفَعُ إِبْرَاهِيمُ الْقَوَاعِدَ مِنْ الْبَيْتِ وَإِسْمَاعِيلُ رَبَّنَا
data/db/muslim.db:3012 بيان نقصان الإيمان بنقص الطاعات وبيان إطلاق لفظ الكفر
data/db/malik.db:435 بَاب  مَا جَاءَ فِي بِنَاءِ الْكَعْبَةِ
data/db/bukhari.db:7411 وقول الله تعالى إلا من أكره وقلبه مطمئن بالإيمان
data/db/muslim.db:4673 تحريم رجوع المهاجر إلى استيطان وطنه
data/db/bukhari.db:1997 بَاب  فَضْلِ مَكَّةَ وَبُنْيَانِهَا
data/db/malik.db:555 بَاب  مَا لَا يَجُوزُ مِنْ النُّذُورِ فِي مَعْصِيَةِ اللَّهِ
data/db/muslim.db:2986 تفاضل أهل الإيمان فيه ورجحان أهل اليمن فيه
data/db/muslim.db:2998 بيان حال إيمان من رغب عن أبيه وهو يعلم
data/db/muslim.db:3670 ما عرض على النبي صلى الله عليه وسلم في صلاة الكسوف
data/db/muslim.db:563 بَاب   اسْتِحْبَابِ الْقُنُوتِ فِي جَمِيعِ الصَّلَاةِ إِذَا نَزَلَتْ بِالْمُسْلِمِينَ نَازِلَةٌ
data/db/muslim.db:4653 وجوب طاعة الأمراء في غير معصية وتحريمها في المعصية
data/db/muslim.db:4471 صحة الإقرار بالقتل وتمكين ولي القتيل من القصاص واستحباب
data/db/muslim.db:3086 نزول عيسى ابن مريم حاكما بشريعة نبينا محمد صلى الله
data/db/bukhari.db:4427 بَاب  أَيْنَ رَكَزَ النَّبِيُّ صَلَّى اللَّهُ عَلَيْهِ وَسَلَّمَ الرَّايَةَ يَوْمَ الْفَتْحِ
data/db/muslim.db:4986 الطب والمرض والرقى
data/db/muslim.db:1175 بَاب   نَقْضِ الْكَعْبَةِ وَبِنَائِهَا
data/db/muslim.db:4322 استحباب الوضع من الدين
data/db/muslim.db:4410 ترك الوصية لمن ليس له شيء يوصي فيه
data/db/muslim.db:2960 الأمر بقتال الناس حتى يقولوا لا إله إلا الله محمد
data/db/muslim.db:4000 جواز التمتع
data/db/muslim.db:3412 نهي من أكل ثوما أو بصلا أو كراثا أو نحوها مما له
data/db/muslim.db:3842 إعطاء المؤلفة قلوبهم على الإسلام وتصبر من قوي إيمانه
data/db/muslim.db:4092 نقض الكعبة وبنائها
data/db/muslim.db:4354 أخذ الحلال وترك الشبهات
data/db/muslim.db:3130 الدليل على دخول طوائف من المسلمين الجنة بغير حساب
data/db/muslim.db:4242 وجوب الكفارة على من حرم امرأته ولم ينو الطلاق
data/db/muslim.db:3418 سجود التلاوة
data/db/muslim.db:5379 وَفِي هَذَا الْحَدِيث تَصْرِيح بِإِثْبَاتِ   الْقَدَر
data/db/bukhari.db:7291 بَاب  رَجْمِ الْحُبْلَى مِنْ الزِّنَا إِذَا أَحْصَنَتْ
data/db/muslim.db:4485 من اعترف على نفسه بالزنى
data/db/muslim.db:4855 إكرام الضيف وفضل إيثاره
data/db/muslim.db:4819 آداب الطعام والشراب وأحكامهما
data/db/muslim.db:5081 إثبات حوض نبينا صلى الله عليه وسلم وصفاته
data/db/muslim.db:4102 سفر المرأة مع محرم إلى حج وغيره
data/db/muslim.db:4913 تحريم تصوير صورة الحيوان وتحريم اتخاذ ما فيه صورة
data/db/muslim.db:4124 فضل المدينة ودعاء النبي صلى الله عليه وسلم فيها
data/db/bukhari.db:4165 بَاب  عَلَامَاتِ النُّبُوَّةِ فِي الْإِسْلَامِ
data/db/bukhari.db:4037 قول الله تعالى واتخذ الله إبراهيم خليلا
data/db/muslim.db:2946 أَهَمُّ مَا يُذْكَرُ فِي الْبَاب اِخْتِلَاف الْعُلَمَاء فِي   الْإِيمَان
data/db/muslim.db:2964 الدليل على أن من مات على التوحيد دخل الجنة قطعا
data/db/muslim.db:3112 أدنى أهل الجنة منزلة فيها

لاحظ أن استعمال علامة الاقتباس “” لاشتراط تتابع الكلمات في العبارة قلل المخرجات

./WhSearchDb.py '"تركها كفر"'
3
data/db/muslim.db:85 بَاب   بَيَانِ إِطْلَاقِ اسْمِ الْكُفْرِ عَلَى مَنْ تَرَكَ الصَّلَاةَ
data/db/muslim.db:3014 بيان إطلاق اسم الكفر على من ترك الصلاة
data/db/muslim.db:2986 تفاضل أهل الإيمان فيه ورجحان أهل اليمن فيه

مثال آخر لاحظ بدئ وبدأ وبدء

./WhSearchDb.py بدء الوحي
10
data/db/bukhari.db:7459 بَاب  أَوَّلُ مَا بُدِئَ بِهِ رَسُولُ اللَّهِ صَلَّى اللَّهُ عَلَيْهِ وَسَلَّمَ مِنْ الْوَحْيِ
data/db/muslim.db:161 بَاب   بَدْءِ الْوَحْيِ إِلَى رَسُولِ اللَّهِ صَلَّى اللَّهُ عَلَيْهِ وَسَلَّمَ
data/db/bukhari.db:5255 حَدَّثَنَا قُتَيْبَةُ حَدَّثَنَا حَمَّادٌ عَنْ يَحْيَى بْنِ عَتِيقٍ عَنْ الْحَسَنِ
data/db/bukhari.db:1 بدْءِ الْوحْيِ
data/db/muslim.db:3090 بدء الوحي إلى رسول الله صلى الله عليه وسلم
data/db/bukhari.db:4277 بَاب  حَدِيثُ زَيْدِ بْنِ عَمْرِو بْنِ نُفَيْلٍ
data/db/bukhari.db:5535 بَاب  مَوْعِظَةِ الرَّجُلِ ابْنَتَهُ لِحَالِ زَوْجِهَا
data/db/muslim.db:5053 4195 - قَوْله : ( كُنْت أَرَى   الرُّؤْيَا
data/db/muslim.db:1333 في الإيلاء واعتزال النساء وتخييرهن وقوله تعالى وإن
data/db/muslim.db:4597 فتح مكة

لاحظ أنني استعملت ال التعريف ووجدها البرنامج دونها

./WhSearchDb.py الإسبال
2
data/db/muslim.db:4881 تحريم جر الثوب خيلاء وبيان حد ما يجوز إرخاؤه إليه
data/db/muslim.db:3036 بيان غلظ تحريم إسبال الإزار والمن بالعطية وتنفيق

محرك البحث xapian

كتب على لغة سي+ وله ربط على كل اللغات الأخرى به العديد من المزايا لكنه كغيره فقير بدعمه للعربية

عند تجربته احتجنا للرقعة التالية:

--- include/xapian/unicode.h~	2008-11-01 01:46:17.000000000 +0200
+++ include/xapian/unicode.h	2009-03-30 15:12:44.000000000 +0300
@@ -298,6 +298,7 @@
 	    (1 << Xapian::Unicode::DECIMAL_DIGIT_NUMBER) |
 	    (1 << Xapian::Unicode::LETTER_NUMBER) |
 	    (1 << Xapian::Unicode::OTHER_NUMBER) |
+	    (1 << Xapian::Unicode::NON_SPACING_MARK) | /* Arabic diacritics are non-spacing */
 	    (1 << Xapian::Unicode::CONNECTOR_PUNCTUATION);
     return ((WORDCHAR_MASK >> get_category(ch)) & 1);
 }

لحل مشكلة كانت به حيث أنه يعتبر الحركات العربية non-spacing marks تفصل الكلمات

كما اصطدمت بكونه يحتاج لكتابة دالة التجذيع في سي++ فقط ولا يمكن عملها في باثون مما يؤخر سرعة التطوير

إذا كنت سنضيف دالة تجذيع كبقية اللغات فالبرنامج يستخدم تقنية snowball حيث توضع ملفات بلغة برمجة خاصة في المجلد languages ويتم تعديل ملفات Makefile لتصنيف الكود الجديد

للمزيد انظر http://snowball.tartarus.org

كانت سرعة الفهرسة لعينة الكتب حوالي نصف دقيقة لكن الغريب هو حجم الفهرس الكبير حيث وصل إلى 200% من حجم العينة (58.8 م.ب) ومع التجذيع اليدوي كانت النتيجة 100% (نفس حجم العينة تقريبا)

وكانت سرعة البحث آنية (أقل من 5 اجزاء من مئة من الثانية مع أنه وجد 1215 تطابقا)

[alsadi@pc1 thawab-python]$ ./SearchDB.py data/index/xapian/ ترك الصلاة كفر
q:[ترك الصلاه كفر]
Parsed query is: Xapian::Query((Zترك:(pos=1) OR Zالصلاه:(pos=2) OR Zكفر:(pos=3)))
1215 results found.
Results 1-10:
1: 100% docid=1524 [data/db/muslim.db:3014:بيان إطلاق اسم الكفر على من ترك الصلاة]
2: 76% docid=1841 [data/db/muslim.db:3648:ترك الصلاة قبل العيد وبعدها في المصلى]
3: 76% docid=4975 [data/db/bukhari.db:2989:بَاب  الصَّلَاةِ عَلَى مَنْ تَرَكَ دَيْنًا]
4: 75% docid=59 [data/db/muslim.db:85:بَاب   بَيَانِ إِطْلَاقِ اسْمِ الْكُفْرِ عَلَى مَنْ تَرَكَ الصَّلَاةَ]
5: 74% docid=1890 [data/db/muslim.db:3746:ترك الصلاة على القاتل نفسه]
6: 74% docid=2966 [data/db/malik.db:219:بَاب  تَرْكِ الصَّلَاةِ قَبْلَ الْعِيدَيْنِ وَبَعْدَهُمَا]
7: 73% docid=379 [data/db/muslim.db:725:بَاب   تَرْكِ الصَّلَاةِ قَبْلَ الْعِيدِ وَبَعْدَهَا فِي الْمُصَلَّى]
8: 73% docid=431 [data/db/muslim.db:829:بَاب   تَرْكِ الصَّلَاةِ عَلَى الْقَاتِلِ نَفْسَهُ]
9: 67% docid=5942 [data/db/bukhari.db:4923:قوله أفرأيت الذي كفر بآياتنا وقال لأوتين مالا وولدا]
10: 67% docid=1520 [data/db/muslim.db:3006:تسمية العبد الآبق كافرا]

وهذا مثال آخر

[alsadi@pc1 thawab-python]$ time ./SearchDB.py data/index/xapian/ بدء الوحي
q:[بدا الوحي]
Parsed query is: Xapian::Query((Zبدا:(pos=1) OR Zالوحي:(pos=2)))
222 results found.
Results 1-10:
1: 100% docid=7210 [data/db/bukhari.db:7459:بَاب  أَوَّلُ مَا بُدِئَ بِهِ رَسُولُ اللَّهِ صَلَّى اللَّهُ عَلَيْهِ وَسَلَّمَ مِنْ الْوَحْيِ]
2: 97% docid=97 [data/db/muslim.db:161:بَاب   بَدْءِ الْوَحْيِ إِلَى رَسُولِ اللَّهِ صَلَّى اللَّهُ عَلَيْهِ وَسَلَّمَ]
3: 89% docid=3481 [data/db/bukhari.db:1:بدْءِ الْوحْيِ]
4: 84% docid=1562 [data/db/muslim.db:3090:بدء الوحي إلى رسول الله صلى الله عليه وسلم]
5: 65% docid=6108 [data/db/bukhari.db:5255:حَدَّثَنَا قُتَيْبَةُ حَدَّثَنَا حَمَّادٌ عَنْ يَحْيَى بْنِ عَتِيقٍ عَنْ الْحَسَنِ]
6: 57% docid=6128 [data/db/bukhari.db:5295:بَاب  كَيْفَ نَزَلَ الْوَحْيُ وَأَوَّلُ مَا نَزَلَ]
7: 53% docid=2573 [data/db/muslim.db:5109:عرق النبي صلى الله عليه وسلم في البرد وحين يأتيه]
8: 53% docid=1127 [data/db/muslim.db:2221:بَاب   عَرَقِ النَّبِيِّ صَلَّى اللَّهُ عَلَيْهِ وَسَلَّمَ فِي الْبَرْدِ وَحِينَ يَأْتِيهِ]
9: 50% docid=2768 [data/db/muslim.db:5498:سؤال اليهود النبي صلى الله عليه وسلم عن الروح و قوله]
10: 48% docid=864 [data/db/muslim.db:1695:بَاب   فَتْحِ مَكَّةَ

محرك البحث lucene

عند تجربة فهرسة نفس العينة كانت سريعة جدا حيث احتاج إلى حوالي 10 ثواني (مع تجذيع بدائي مختلف مكتوب بلغة جافا وليس غروفي) بحجم 17 م.ب عند عدم حفظ العاوين و 19 ميغا عند حفظ العناوين

عملية البحث تستغرق ثانية تقريبا وهو الوقت اللازم لتحميل جافا (ربما إن كانت محملة مسبقا ستكون آنية تقريبا)

[alsadi@pc1 thawab]$ time groovy source/SearchDb.groovy '"بدء الوحي"'
HITS 1
0.4388401
stored/uncompressed,indexed<FN:data/db/bukhari.db>
stored/uncompressed,indexed<ID:1>
stored/uncompressed,indexed<TITLE:بدْءِ الْوحْ
real	0m1.048s
user	0m1.005s
sys	0m0.092s

[alsadi@pc1 thawab]$ groovy source/SearchDb.groovy بدء الوحي
HITS 96
0.41719502
stored/uncompressed,indexed<FN:data/db/bukhari.db>
stored/uncompressed,indexed<ID:1>
stored/uncompressed,indexed<TITLE:بدْءِ الْوحْيِ>
0.21379709
stored/uncompressed,indexed<FN:data/db/bukhari.db>
stored/uncompressed,indexed<ID:3985>
stored/uncompressed,indexed<TITLE:ما جاء في قول الله تعالى وهو الذي يبدأ الخلق ثم يعيده>
0.20339794
stored/uncompressed,indexed<FN:data/db/bukhari.db>
stored/uncompressed,indexed<ID:3307>
stored/uncompressed,indexed<TITLE:بَاب  الشُّهَدَاءِ الْعُدُولِ>
0.20339794
stored/uncompressed,indexed<FN:data/db/bukhari.db>
stored/uncompressed,indexed<ID:5205>
stored/uncompressed,indexed<TITLE:قوله والرجز فاهجر>
0.20339794
stored/uncompressed,indexed<FN:data/db/bukhari.db>
stored/uncompressed,indexed<ID:7769>
stored/uncompressed,indexed<TITLE:بَاب  مَا كَانَ النَّبِيُّ صَلَّى اللَّهُ عَلَيْهِ وَسَلَّمَ يُسْأَلُ مِمَّا لَمْ يُنْزَلْ>
0.19176543
stored/uncompressed,indexed<FN:data/db/muslim.db>
stored/uncompressed,indexed<ID:2221>
stored/uncompressed,indexed<TITLE:بَاب   عَرَقِ النَّبِيِّ صَلَّى اللَّهُ عَلَيْهِ وَسَلَّمَ فِي الْبَرْدِ وَحِينَ يَأْتِيهِ>
0.18760023
stored/uncompressed,indexed<FN:data/db/muslim.db>
stored/uncompressed,indexed<ID:5109>
stored/uncompressed,indexed<TITLE:عرق النبي صلى الله عليه وسلم في البرد وحين يأتيه>
0.16779475
stored/uncompressed,indexed<FN:data/db/bukhari.db>
stored/uncompressed,indexed<ID:2313>
stored/uncompressed,indexed<TITLE:بَاب  إِذَا أَحْرَمَ جَاهِلًا وَعَلَ
time groovy source/SearchDb.groovy الإسبال
HITS 3
0.80785483
stored/uncompressed,indexed<FN:data/db/muslim.db>
stored/uncompressed,indexed<ID:4881>
stored/uncompressed,indexed<TITLE:تحريم جر الثوب خيلاء وبيان حد ما يجوز إرخاؤه إليه>
0.39978445
stored/uncompressed,indexed<FN:data/db/muslim.db>
stored/uncompressed,indexed<ID:5040>
stored/uncompressed,indexed<TITLE:حكم إطلاق لفظة العبد والأمة والمولى والسيد>
0.3769204
stored/uncompressed,indexed<FN:data/db/muslim.db>
stored/uncompressed,indexed<ID:3036>
stored/uncompressed,indexed<TITLE:بيان غلظ تحريم إسبال الإزار والمن بالعطية وتنفيق>

groovy source/SearchDb.groovy ترك الصلاة كفر
HITS 1520
0.7442378
stored/uncompressed,indexed<FN:data/db/muslim.db>
stored/uncompressed,indexed<ID:85>
stored/uncompressed,indexed<TITLE:بَاب   بَيَانِ إِطْلَاقِ اسْمِ الْكُفْرِ عَلَى مَنْ تَرَكَ الصَّلَاةَ>
0.66830057
stored/uncompressed,indexed<FN:data/db/muslim.db>
stored/uncompressed,indexed<ID:3014>
stored/uncompressed,indexed<TITLE:بيان إطلاق اسم الكفر على من ترك الصلاة>
0.4451205
stored/uncompressed,indexed<FN:data/db/muslim.db>
stored/uncompressed,indexed<ID:3012>
stored/uncompressed,indexed<TITLE:بيان نقصان الإيمان بنقص الطاعات وبيان إطلاق لفظ الكفر>
0.42100447
stored/uncompressed,indexed<FN:data/db/bukhari.db>
stored/uncompressed,indexed<ID:7411>
stored/uncompressed,indexed<TITLE:وقول الله تعالى إلا من أكره وقلبه مطمئن بالإيمان>
0.39304644
stored/uncompressed,indexed<FN:data/db/muslim.db>
stored/uncompressed,indexed<ID:4072>
stored/uncompressed,indexed<TITLE:استحباب النزول بالمحصب يوم النفر والصلاة به>
0.39260826
stored/uncompressed,indexed<FN:data/db/muslim.db>
stored/uncompressed,indexed<ID:563>
stored/uncompressed,indexed<TITLE:بَاب   اسْتِحْبَابِ الْقُنُوتِ فِي جَمِيعِ الصَّلَاةِ إِذَا نَزَلَتْ بِالْمُسْلِمِينَ نَازِلَةٌ>
0.36176178
stored/uncompressed,indexed<FN:data/db/bukhari.db>
stored/uncompressed,indexed<ID:771>
stored/uncompressed,indexed<TITLE:بَاب  مَنْ نَسِيَ صَلَاةً فَلْيُصَلِّ إِذَا ذَكَرَ وَلَا يُعِيدُ إِلَّا تِلْكَ الصَّلَاةَ>
0.353653
stored/uncompressed,indexed<FN:data/db/muslim.db>
stored/uncompressed,indexed<ID:3670>
stored/uncompressed,indexed<TITLE:ما عرض على النبي صلى الله عليه وسلم في صلاة الكسوف>
thawab/search.txt · آخر تعديل: 2015/04/23 03:21 بواسطة 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki