ในวิศวกรรมซอฟต์แวร์เราสร้างดัชนีตลอดเวลา (เช่นในฐานข้อมูล) แต่ฉันก็ได้ยินคนจำนวนมากพูดถึงดัชนีกลับหัว มีบางอย่างที่แตกต่างกันโดยพื้นฐานระหว่างทั้งสอง? พวกเขาฟังดูเหมือนสิ่งเดียวกัน
ในวิศวกรรมซอฟต์แวร์เราสร้างดัชนีตลอดเวลา (เช่นในฐานข้อมูล) แต่ฉันก็ได้ยินคนจำนวนมากพูดถึงดัชนีกลับหัว มีบางอย่างที่แตกต่างกันโดยพื้นฐานระหว่างทั้งสอง? พวกเขาฟังดูเหมือนสิ่งเดียวกัน
คำตอบ:
การใช้งานทั่วไปอย่างหนึ่งคือ"... เพื่อให้สามารถค้นหาข้อความเต็มได้อย่างรวดเร็ว"
ทั้งสองประเภทแสดงว่าทิศทาง หนึ่งนำคุณไปข้างหน้าผ่านดัชนีและอีกอันจะพาคุณย้อนกลับ (ผกผัน) ผ่านดัชนี แค่นั้นแหละ. ไม่มีความลึกลับที่จะเปิดเผยที่นี่ มิฉะนั้นทั้งสองประเภทจะเหมือนกันมันเป็นเพียงคำถามเกี่ยวกับข้อมูลที่คุณมีและข้อมูลที่คุณกำลังพยายามค้นหา
เพื่อตอบคำถามของคุณฉันไม่คิดว่าจะมีวิธีที่จะทราบได้ว่าทำไมการใช้งานจึงเป็นเช่นทุกวันนี้ เหตุผลเดียวที่สำคัญในการกำหนดว่าforward
อันไหนinverted
คืออะไรเพื่อให้เราทุกคนสามารถสนทนาเกี่ยวกับพวกเขาและทุกคนรู้ว่าเรากำลังพูดถึงทิศทางใด ลองนึกถึงคำว่า "ซ้าย" และ "ขวา": เป็นคำที่สัมพันธ์กัน ซึ่งไม่สำคัญยกเว้นว่าทุกคนต้องตกลงกันว่าอันไหน "ซ้าย" และอันไหน "ถูก" เพื่อให้คำมีความหมาย หากในฐานะวัฒนธรรมเราตัดสินใจที่จะพลิกไปทางซ้ายและขวาคุณก็จะมีปัญหาเดียวกันในการหาว่า "เลี้ยวขวา" กับ "เลี้ยวซ้าย" คืออะไรเนื่องจากความหมายที่ตกลงกันได้เปลี่ยนไป อย่างไรก็ตามการตั้งชื่อเป็นไปตามอำเภอใจ เกี่ยวกับความหมาย
ในความคิดเห็นของคุณที่คุณถามว่า "โปรดอย่าเพิ่งนิยามคำศัพท์" คุณกำลังพลาดประเด็นและฉันคิดว่าคุณเพิ่งจะวางสายกับคำพูดเมื่อไม่มีความแตกต่างอย่างแน่นอน
เพื่อประโยชน์ของผู้อ่านในอนาคตตอนนี้ฉันจะให้ตัวอย่างดัชนี "ไปข้างหน้า" และ "กลับด้าน" หลายรายการ:
หากคุณคิดว่าค่าผกผันของดัชนีเป็นสิ่งที่เหมือนกับค่าผกผันของฟังก์ชันในคณิตศาสตร์โดยที่ผกผันเป็นสิ่งพิเศษที่มีรูปแบบที่แตกต่างออกไปคุณก็เข้าใจผิดว่านั่นไม่ใช่กรณีนี้
ในเครื่องมือค้นหาคุณมีรายการเอกสาร (หน้าบนเว็บไซต์) ซึ่งคุณป้อนคำหลักบางคำและรับผลลัพธ์กลับมา
ดัชนีไปข้างหน้า (หรือเพียงแค่ดัชนี) เป็นรายการของเอกสารและคำที่ปรากฏในพวกเขา ในตัวอย่างการค้นหาเว็บ Google จะรวบรวมข้อมูลเว็บสร้างรายการเอกสารค้นหาว่าคำใดปรากฏในแต่ละหน้า
ดัชนีคว่ำเป็นรายการของคำและเอกสารที่ปรากฏ ในตัวอย่างการค้นหาเว็บคุณระบุรายการคำ (ข้อความค้นหาของคุณ) และ Google จะสร้างเอกสาร (ลิงก์ผลการค้นหา)
ทั้งสองเป็นดัชนี - เป็นเพียงคำถามว่าคุณจะไปในทิศทางใด ส่งต่อมาจากเอกสาร -> ถึง -> คำกลับด้านคือจากคำ -> ถึง -> เอกสาร
อีกตัวอย่างหนึ่งคือการค้นหา DNS (ซึ่งใช้ชื่อโฮสต์และส่งคืนที่อยู่ IP) และการค้นหาแบบย้อนกลับ (ซึ่งใช้ที่อยู่ IP และให้ชื่อโฮสต์แก่คุณ)
ดัชนีที่อยู่ด้านหลังของหนังสือเป็นดัชนีกลับหัวตามที่กำหนดไว้ในตัวอย่างข้างต้น - รายการคำศัพท์และตำแหน่งที่จะหาได้ในหนังสือ ในหนังสือสารบัญเป็นเหมือนดัชนีไปข้างหน้า : เป็นรายการเอกสาร (บท) ที่หนังสือเล่มนี้มีอยู่ยกเว้นแทนที่จะแสดงคำในส่วนเหล่านั้นสารบัญจะให้ชื่อ / คำอธิบายทั่วไปของสิ่งที่ ที่มีอยู่ในเอกสารเหล่านั้น (บท)
ดัชนีไปข้างหน้าในโทรศัพท์มือถือของคุณเป็นรายชื่อผู้ติดต่อและที่หมายเลขโทรศัพท์ (มือถือบ้านที่ทำงาน) จะเกี่ยวข้องกับรายชื่อเหล่านั้น ดัชนีกลับเป็นสิ่งที่ช่วยให้คุณสามารถป้อนหมายเลขโทรศัพท์และเมื่อคุณกดปุ่ม "กด" คุณเห็นชื่อของบุคคลมากกว่าจำนวนเพราะโทรศัพท์ของคุณได้รับหมายเลขโทรศัพท์และพบว่าคุณติดต่อที่เชื่อมโยงกับมัน
พวกเขาเรียกมันว่ากลับหัวเพียงเพราะมีดัชนีไปข้างหน้าอยู่แล้ว ยกตัวอย่างเช่นเครื่องมือค้นหาประกอบด้วยสองส่วนส่วนแรกคือ "โปรแกรมรวบรวมข้อมูลเว็บและโปรแกรมแยกวิเคราะห์" ซึ่งสร้างดัชนีจากเอกสารไปยังคำส่วนที่สองคือฐานข้อมูลการค้นหาซึ่งสร้างดัชนีจากคำไปยังเอกสาร เนื่องจากดัชนีแรกมีอยู่เราจึงเรียกดัชนีที่สองว่าดัชนีกลับด้าน
หากคุณตั้งชื่อ TOC (สารบัญ) ของหนังสือเป็นดัชนีคุณควรเรียกดัชนีที่ท้ายหนังสือว่า "ดัชนีกลับหัว" หรือในอีกด้านหนึ่งคุณสามารถเรียก TOC ว่าดัชนีกลับด้าน
inverted index
แม้ว่าดัชนีปกติทั้งหมดในชีวิตของเราจะถูกใช้ไปแล้วinverted
ก็ตาม
โดยทั่วไปเมื่อพูดถึงดัชนีคุณหมายถึงการคำนวณเพิ่มเติมบางอย่างหรือเก็บผลลัพธ์ของขั้นตอนที่ทำขึ้นเพื่อเร่งความเร็วแอปพลิเคชัน (เช่น MySQL หรือ RDBMS อื่น ๆปรึกษา MySQL เอกสาร ) การจัดทำดัชนีอาจเกี่ยวข้องกับการแคชเป็นต้น
ดัชนีกลับด้านสร้างไฟล์ที่มีโครงสร้างที่เน้นการค้นหา (fulltext) เป็นหลัก
ดัชนีกลับหัวประกอบด้วยไฟล์หลักสองไฟล์:
ในคำศัพท์เป็นคำทั่วไปที่ดึงมาจากข้อความ (แน่นอนว่าหลังจากกรองคำในบัญชีดำเช่นคำสรรพนาม) ไฟล์เกิดขึ้นมีการเชื่อมต่อระหว่างคำและเอกสาร (word1 ปรากฏใน doc1 และ doc2 ไม่ใช่ใน doc3) มันแสดงในรูปแบบของเมทริกซ์
ในภาพด้านบนจะแสดงขั้นตอนการสร้างไฟล์ทั้งสองที่กล่าวถึง
หากคุณสนใจปัญหานี้เพิ่มเติมฉันสามารถแนะนำหนังสือที่ยอดเยี่ยมที่เขียนโดย Ricardo Yated - การค้นคืนข้อมูลสมัยใหม่ ( ดูใน Amazon ) - เกี่ยวกับหน้า 200 ฉันคิดว่า
หวังว่ามันจะช่วย :-)
Normalocityได้สร้างความแตกต่างอย่างน่าอัศจรรย์ระหว่างดัชนีไปข้างหน้าและดัชนีกลับด้าน แต่สำหรับคำถามที่ว่าทำไมจึงเรียกดัชนีไปข้างหน้าและอีกดัชนีกลับด้านบางทีนี่อาจเป็นสาเหตุที่เรียกว่าดัชนีดังกล่าว -
ตัวอย่างของการใช้เครื่องมือค้นหารวบรวมข้อมูลและจัดทำดัชนี (หรือการสร้างดัชนีหนังสือ) ซึ่งเป็นดัชนีไปข้างหน้าสามารถสร้างขึ้นพร้อม ๆ กันขณะที่คุณกำลังรวบรวมข้อมูลหน้าเว็บ (หรืออ่านหนังสือ) หรือก้าวไปข้างหน้า ดังนั้นหากคุณมีหน้าเว็บ 10 หน้าในการรวบรวมข้อมูล (หรือ 10 บทในหนังสือ) คุณสามารถรวบรวมข้อมูลหน้าเว็บแรก (อ่านบทแรก) จากนั้นสร้างรายการคำที่ปรากฏในหน้าเว็บ (คำที่ปรากฏในบท) และดำเนินการต่อ กระบวนการนี้สำหรับหน้าเว็บอื่น ๆ (บทอื่น ๆ ) ดังนั้นเมื่อคุณได้รวบรวมข้อมูลทั้ง 10 หน้าเว็บ (อ่านทั้ง 10 บท) ดัชนีการส่งต่อของคุณจะเสร็จสมบูรณ์โดยแต่ละหน้าเว็บ (บท) จะชี้ไปที่รายการคำที่มีอยู่
แต่ในการสร้างดัชนีกลับหัวคุณจะต้องรวบรวมข้อมูลทั้ง 10 หน้าเว็บ (อ่าน 10 บท) จากนั้นนำแต่ละคำจากรายการเอกสารแต่ละรายการและดูว่าเอกสารใดมีคำนั้น ดังนั้นนี่คือเหมือนจะย้อนกลับเมื่อคุณได้รวบรวมข้อมูลหน้าเว็บ (อ่านบทของหนังสือ) มันเรียกว่าดัชนีกลับด้าน
นี่เป็นเพียงการคาดเดาของฉัน
ดัชนีมีหลายประเภท ตัวอย่างเช่น B-tree, R-tree, hash ... เพื่อวัตถุประสงค์ที่แตกต่างกันเราต้องเลือกดัชนีที่ถูกต้อง
ดัชนีกลับหัวเป็นดัชนีพิเศษ ดัชนีกลับด้านมักจะใช้ในเครื่องมือค้นหาข้อความแบบเต็ม ใช้ดัชนีกลับด้านเพื่อค้นหาตำแหน่งของคำในเอกสาร (หรือชุดเอกสาร) โดยเร็วที่สุด ลองนึกถึงขีด จำกัด ของหน่วยความจำและซีพียูดัชนีอื่น ๆ ไม่สามารถทำงานนี้ให้เสร็จได้
คุณสามารถอ่านเอกสาร Lucene สำหรับรายละเอียดเพิ่มเติม เป็นเครื่องมือค้นหาโอเพ่นซอร์ส http://lucene.apache.org/java/docs/index.html
คำว่า "ดัชนีคำกลับหัว" หมายถึงการเปลี่ยนแปลงความสัมพันธ์ของเอกสารฉบับเดียวที่มีคำหลายคำกับคำที่ไม่ซ้ำกันแต่ละคำที่มี (หรือระบุ) รายการเอกสารจำนวนมาก นี่คือการใช้ความสัมพันธ์แบบหนึ่งต่อกลุ่ม (เอกสารเป็นคำ) และการย้อนกลับ (หรือย้อนกลับ) อย่างมีประสิทธิภาพเพื่อให้มีความสัมพันธ์แบบหนึ่งต่อกลุ่มแบบ "กลับด้าน" ใหม่ซึ่งเป็นคำที่ไม่ซ้ำกันแต่ละคำที่เกี่ยวข้องกับหลายคำ เอกสาร (กล่าวคือทั้งหมดที่มีคำนั้น) ต้นกำเนิดนั้นง่ายมากและคำว่า "ดัชนีกลับด้าน" ถูกใช้เพื่ออธิบายดัชนีด้วยตนเองประเภทเดียวกันมานานก่อนที่คอมพิวเตอร์และการจัดทำดัชนีความเร็วสูงแบบอิเล็กทรอนิกส์จะมีอยู่จริง (ใช่แล้วฉันเป็นโปรแกรมเมอร์ที่มีอายุมากและเกือบจะ โตพอที่จะถือว่าเกรซฮ็อปเปอร์เป็น "หญิงสาวแสนหวาน" อายุที่เหมาะสมสำหรับการติดพันเมื่อภาษาโคบอลเป็นภาษาใหม่ที่สดใส) โปรดอย่าทิ้ง geezers ของเราในขณะนี้เนื่องจากบางครั้งเราอาจจัดหา tid-bit หรือสองบิตในอดีตที่มีประโยชน์และอาจมีค่า - เมื่อ RAM ส่วนตัวของเรายังทำงานอยู่ [ยิ้ม]
ในดัชนีกลับด้านเรามีรูปแบบต่อไปนี้:
word1-> รายการเอกสารที่เกิดขึ้นใน (เรียงลำดับ)
word2-> รายการเอกสารที่เกิดขึ้นใน (เรียงลำดับ)
มีประโยชน์มากสำหรับการประมวลผลคำค้นหาของเครื่องมือค้นหาเนื่องจากช่วยให้เราสามารถค้นหาเอกสารที่คำนั้นเกิดขึ้นได้
คุณสามารถใช้การเคลื่อนย้ายเครื่องจักรภายใต้การดูแลเพื่อสร้างดัชนีกลับด้านนี้
ความแตกต่างอีกประการหนึ่ง:
การจัดการการอัปเดตด้วยดัชนีกลับด้านมีราคาแพงเมื่อเทียบกับดัชนีส่งต่อ
ดัชนีไปข้างหน้าจัดการกับการอัปเดตได้อย่างง่ายดายโดยสะท้อนการเปลี่ยนแปลงเฉพาะในดัชนีเอกสารที่เกี่ยวข้องในขณะที่ดัชนีกลับด้านการเปลี่ยนแปลงเดียวกันจะต้องสะท้อนในหลายตำแหน่งในดัชนีกลับด้าน