ข้อมูลทดสอบมาจากชุดข้อมูล ClueWeb09B ซึ่งตัวอย่างถูกจัดเก็บไว้ในไดเร็กทอรี ./test_data
เพื่อการทดสอบ เมื่อเริ่มสร้างดัชนี โปรแกรมจะอ่านดัชนีที่บีบอัดไปข้างหน้า ขยายขนาดและสร้างการผ่านรายการตำแหน่ง การผ่านรายการตำแหน่งจะถูกนับเพื่อสร้างการผ่านรายการที่ไม่ใช่ตำแหน่ง
การผ่านรายการตามตำแหน่งและการผ่านรายการที่ไม่ใช่ตำแหน่งจะถูกเก็บไว้ในเวกเตอร์ STL สองตัวแยกกัน เมื่อเวกเตอร์ถึงขนาดที่กำหนด เช่น 500 เวกเตอร์ทั้งสองจะถูกบีบอัดและว่างเปล่า ไฟล์สองไฟล์จะถูกสร้างขึ้นบนดิสก์ภายใต้ไดเร็กทอรี disk_index
เพื่อจัดเก็บไบนารีอาร์เรย์ที่ถูกบีบอัด กระบวนการนี้ทำซ้ำจนกว่าจะเหลือการโพสต์น้อยกว่า 500 รายการ การผ่านรายการที่เหลือจะถูกเก็บไว้ในหน่วยความจำเป็นดัชนีไดนามิก
ณ ขณะนี้มีการใช้วิธีการเข้ารหัสเพียงรูปแบบเดียวเท่านั้น เมื่อเมธอดเท่ากับ 1 การผ่านรายการจะถูกบีบอัดโดยใช้การเข้ารหัสไบต์แบบแปรผัน กฎไบต์ตัวแปรที่ใช้ในดัชนีของฉันมีดังนี้:
ชื่อของแต่ละไฟล์ประกอบด้วยสองส่วน คำนำหน้า และตัวเลข ดัชนีตำแหน่งจะถูกจัดเก็บไว้ในไฟล์ "Z0", "Z1", ... "Zn", "I0", "I1", ... "In" หลังจากการบีบอัด ตัวสร้างดัชนีจะตรวจสอบว่ามี "Z0" อยู่บนดิสก์หรือไม่ หาก "Z0" ไม่ออก แสดงว่า "Z0" ถูกสร้างขึ้นและเขียนดัชนีไปที่ "Z0" หากมี "Z0" ดัชนีจะถูกเขียนเป็น "I0" แทน สำหรับดัชนีที่ไม่ใช่ตำแหน่ง จะมีการตรวจสอบ "X0" และเขียนหากไม่มีอยู่ มิฉะนั้นดัชนีที่ไม่ใช่ตำแหน่งจะถูกเขียนเป็น "L0" คำว่า ID จะถูกจัดเก็บไว้ในข้อมูลเมตาของไฟล์ของไฟล์ที่เกี่ยวข้อง ข้อมูลเมตาของคำนี้เก็บชื่อไฟล์และตำแหน่งเริ่มต้นและสิ้นสุด
ไฟล์สองไฟล์ที่มีหมายเลขดัชนีเดียวกันไม่สามารถอยู่ร่วมกันบนดิสก์ได้อย่างถาวร เมื่อใดก็ตามที่การโพสต์ 500 รายการเสร็จสิ้นการเขียนลงดิสก์ ตัวสร้างดัชนีจะตรวจสอบว่ามีสองไฟล์ที่มีหมายเลขดัชนีเดียวกันหรือไม่ หากมี สองไฟล์จะถูกรวมเป็นไฟล์ใหม่โดยมีหมายเลขดัชนีเพิ่มขึ้น 1 กระบวนการนี้เรียกว่าการรวมลอการิทึม ตัวอย่างเช่น หากมีทั้ง "Z0" และ "I0" ทั้งสองรายการจะรวมกันและเขียนลงใน "Z1" หรือ "I1" หากมี "Z1" อยู่ในดิสก์อยู่แล้ว กระบวนการนี้ทำซ้ำจนกว่าจะไม่มีไฟล์ "I" บนดิสก์ ข้อมูลเมตาได้รับการอัปเดตตามนั้น
ได้รับการผ่านรายการใหม่และเก็บไว้ในดัชนีไดนามิก การผ่านรายการที่สร้างโดยตัววิเคราะห์เอกสารเรียกว่าการผ่านรายการภายนอก และการผ่านรายการที่จะจัดเก็บไว้ในหน่วยความจำเรียกว่าการผ่านรายการภายใน เมื่อมีการโพสต์ในหน่วยความจำ 500 รายการ ระบบจะบีบอัดโดยใช้วิธีเดียวกับดัชนีอาคาร
indexer.cpp
ที่ต้องแก้ไข และสองฟังก์ชันสามารถปรับให้เหมาะสมในไฟล์เดียวกันได้ ./initialize.sh
เพื่อสร้างไดเร็กทอรีที่เก็บดัชนีดิสก์และตรวจสอบให้แน่ใจว่าไดเร็กทอรีว่างเปล่า ให้เรียก make
./INDEX
เริ่มสร้างดัชนี