โดยพื้นฐานแล้วสำหรับงานนี้คุณสามารถใช้ฐานข้อมูล SQL ใด ๆ ได้อย่างมีประสิทธิภาพด้วยการสนับสนุนที่ดีของดัชนีแบบต้นไม้ B + (MySQL จะเหมาะกับคุณที่สมบูรณ์แบบ)
สร้าง 3 ตาราง:
- ตารางเอกสาร, คอลัมน์: id / document
- ตาราง N-grams: n_gram_id / n_gram
- การแม็พระหว่าง n-grams กับเอกสาร: document_id / n_gram_id
สร้างดัชนีบนสตริง N-gram table / n_gram และ Mapping table / n_gram_id นอกจากนี้คีย์หลักจะถูกทำดัชนีโดยค่าปริยายด้วย
การดำเนินงานของคุณจะมีประสิทธิภาพ:
- การแทรกเอกสาร: เพียงดึง n-g ทั้งหมดและแทรกลงในตารางเอกสารและตาราง N-g
- การค้นหา in_gram จะรวดเร็วด้วยการสนับสนุนของดัชนี
- การค้นหาสำหรับ n-g ทั้งหมดที่มี sub-n-gram: ใน 2 ขั้นตอน - เพียงค้นหาตามดัชนี n-g ทั้งหมดซึ่งมี sub-n-gram จากตารางที่ 2 จากนั้น - เรียกเอกสารที่เกี่ยวข้องทั้งหมดสำหรับแต่ละ n-g
คุณไม่จำเป็นต้องใช้การเข้าร่วมเพื่อบรรลุการดำเนินการทั้งหมดเหล่านี้ดังนั้นดัชนีจะช่วยได้มาก นอกจากนี้หากข้อมูลจะไม่ถูกกำหนดในเครื่องหนึ่ง - คุณสามารถใช้รูปแบบการแบ่งส่วนเช่นการจัดเก็บ n_grams เริ่มต้นจากบนเซิร์ฟเวอร์หนึ่งและออนซ์ในรูปแบบอื่นหรืออื่น ๆ ที่เหมาะสม
นอกจากนี้คุณสามารถใช้ MongoDB ได้ แต่ฉันไม่แน่ใจว่าคุณต้องใช้รูปแบบการจัดทำดัชนีอย่างไร สำหรับ MongoDB คุณจะได้รับรูปแบบการแบ่งส่วนฟรีตามที่มีอยู่แล้วในตัว