بيانات الاختبار مأخوذة من ClueWeb09B Dataset، والتي يتم تخزين العينة منها في الدليل ./test_data
لغرض الاختبار. عند البدء في إنشاء الفهرس، يقرأ البرنامج الفهرس الأمامي المضغوط، ويفك ضغطه وينشئ النشر الموضعي. يتم حساب الترحيل الموضعي لإنشاء ترحيل غير موضعي.
يتم تخزين الترحيل الموضعي والترحيل غير الموضعي في ناقلين STL بشكل منفصل. عندما يصل المتجه إلى حجم معين، على سبيل المثال 500، يتم ضغط كلا المتجهين وإفراغهما. يتم إنشاء ملفين على القرص ضمن دليل disk_index
لتخزين المصفوفة الثنائية المضغوطة. يتم تكرار هذه العملية حتى يتبقى أقل من 500 مشاركة. يتم تخزين الترحيلات المتبقية في الذاكرة كمؤشر ديناميكي.
اعتبارًا من الآن، يتم تنفيذ نموذج واحد فقط من أساليب التشفير. عندما تساوي الطريقة 1، يتم ضغط الترحيلات باستخدام ترميز البايت المتغير. قاعدة البايت المتغيرة المستخدمة في الفهرس الخاص بي هي كما يلي:
يحتوي اسم كل ملف على جزأين، بادئة ورقم. يتم تخزين الفهارس الموضعية في ملف "Z0"، "Z1"، ... "Zn"، "I0"، "I1"، ... "In". بعد الضغط، يتحقق المفهرس من وجود "Z0" على القرص. إذا لم يخرج "Z0" فسيتم إنشاء "Z0" وكتابة الفهرس إلى "Z0". في حالة وجود "Z0"، تتم كتابة الفهرس إلى "I0" بدلاً من ذلك. بالنسبة للمؤشر غير الموضعي، يتم تحديد "X0" والكتابة إليه في حالة عدم وجوده. وإلا فسيتم كتابة الفهرس غير الموضعي إلى "L0". يتم تخزين معرف المصطلح في البيانات التعريفية للملف المقابل. تقوم البيانات التعريفية للمصطلح بتخزين اسم الملف وموضع البداية والنهاية.
لا يمكن أبدًا أن يتواجد ملفان لهما نفس رقم الفهرس على القرص بشكل دائم. عند الانتهاء من كتابة 500 منشور على القرص، يتحقق المفهرس مما إذا كان هناك ملفان لهما نفس رقم الفهرس. إذا كان هناك ملفان، فسيتم دمجهما في ملف جديد مع زيادة رقم الفهرس بمقدار 1. تُعرف هذه العملية بالدمج اللوغاريتمي. على سبيل المثال، في حالة وجود كل من "Z0" و"I0"، يتم دمجهما وكتابتهما في "Z1"، أو "I1" إذا كان "Z1" موجودًا بالفعل على القرص. يتم تكرار هذه العملية حتى لا توجد ملفات "I" على القرص. ويتم تحديث البيانات التعريفية وفقًا لذلك.
يتم استلام المشاركات الجديدة وتخزينها في فهرس ديناميكي. تسمى الترحيلات التي تم إنشاؤها بواسطة محلل المستندات بالترحيلات الخارجية وتسمى الترحيلات التي سيتم تخزينها في الذاكرة بالترحيلات الداخلية. عندما يكون هناك 500 مشاركة في الذاكرة، يتم ضغطها باستخدام نفس طريقة بناء الفهرس.
indexer.cpp
يحتاجان إلى التصحيح، ويمكن تحسين وظيفتين في نفس الملف ./initialize.sh
لإنشاء دليل حيث يتم تخزين فهرس القرص والتأكد من أن الدليل فارغ، قم بإجراء مكالمات make
./INDEX
يبدأ في بناء الفهرس