0 บทนำ
ด้วยการพัฒนาเวิลด์ไวด์เว็บและการถือกำเนิดของยุคข้อมูลขนาดใหญ่ข้อมูลดิจิตอลจำนวนมากถูกผลิตจัดเก็บส่งส่งและแปลงทุกวัน วิธีการค้นหาข้อมูลที่ตรงกับความต้องการของคุณในทางใดทางหนึ่งจากข้อมูลจำนวนมากเพื่อให้สามารถสั่งซื้อและใช้งานได้กลายเป็นปัญหาสำคัญ เทคโนโลยีการค้นหาข้อความแบบเต็มเป็นแอปพลิเคชันแบบสอบถามข้อมูลที่พบบ่อยที่สุดในปัจจุบัน ในชีวิตเครื่องมือค้นหาจะใช้ในการค้นหาข้อมูลในฟอรัมบล็อก หลักการหลักของการค้นหาเหล่านี้คือเทคโนโลยีการค้นหาข้อความแบบเต็มที่จะนำไปใช้ในบทความนี้ ด้วยการตระหนักถึงการทำให้เป็นดิจิตอลของข้อมูลเอกสารการจัดเก็บอย่างมีประสิทธิภาพและการสกัดข้อมูลที่ทันเวลาและถูกต้องเป็นพื้นฐานสำหรับทุก บริษัท องค์กรและหน่วยงานเพื่อวางรากฐานที่ดี มีทฤษฎีและวิธีการที่เป็นผู้ใหญ่มากมายสำหรับการค้นหาข้อความเต็มรูปแบบเป็นภาษาอังกฤษ กลไกค้นหาข้อความเต็มรูปแบบโอเพ่นซอร์ส Lucene เป็นโครงการย่อยของทีมโครงการจาการ์ตาของมูลนิธิซอฟต์แวร์ Apache วัตถุประสงค์คือเพื่อให้นักพัฒนาซอฟต์แวร์มีชุดเครื่องมือที่ใช้งานง่ายและใช้งานง่ายเพื่ออำนวยความสะดวกในการใช้งานฟังก์ชั่นการค้นหาข้อความแบบเต็มในระบบเป้าหมาย Lucene ไม่สนับสนุนภาษาจีน แต่ปัจจุบันมีกลุ่มคำภาษาจีนโอเพ่นซอร์สหลายคนที่สามารถจัดทำดัชนีเนื้อหาภาษาจีนได้ จากการศึกษาหลักการหลักของลูอีนบทความนี้ตระหนักถึงการรวบรวมข้อมูลและการดึงหน้าเว็บจีนและอังกฤษตามลำดับ
1 บทนำสู่ลูซีน
1.1 บทนำสู่ลูซีน
Lucene เป็นเครื่องมือเครื่องมือค้นหาแบบเต็มข้อความที่เขียนด้วย Java ซึ่งใช้ฟังก์ชั่นหลักสองอย่างคือการจัดทำดัชนีและการค้นหาและทั้งสองนั้นเป็นอิสระจากกันซึ่งช่วยให้นักพัฒนาสามารถขยายได้อย่างง่ายดาย Lucene ให้ API ที่หลากหลายซึ่งสามารถโต้ตอบกับข้อมูลที่เก็บไว้ในดัชนีได้อย่างง่ายดาย ควรสังเกตว่ามันไม่ใช่แอปพลิเคชันการค้นหาข้อความแบบเต็มรูปแบบที่สมบูรณ์ แต่ให้ฟังก์ชั่นการจัดทำดัชนีและการค้นหาสำหรับแอปพลิเคชัน นั่นคือถ้าลูซีนต้องการทำงานอย่างแท้จริงจำเป็นต้องทำการพัฒนาทุติยภูมิที่จำเป็นบางอย่างตาม
การออกแบบโครงสร้างของ Lucene นั้นคล้ายคลึงกับฐานข้อมูล แต่ดัชนีของ Lucene นั้นแตกต่างจากฐานข้อมูลมาก ฐานข้อมูลและการจัดทำดัชนี Lucene นั้นมีไว้เพื่อความสะดวกในการค้นหา แต่ฐานข้อมูลถูกสร้างขึ้นเฉพาะสำหรับบางฟิลด์และข้อมูลจะต้องถูกแปลงเป็นข้อมูลที่จัดรูปแบบและบันทึก การค้นหาข้อความแบบเต็มคือการจัดทำดัชนีข้อมูลทั้งหมดในวิธีใดวิธีหนึ่ง ความแตกต่างและความคล้ายคลึงกันของการค้นหาทั้งสองแสดงในตารางที่ 1-1
ตารางที่ 1-1: การเปรียบเทียบการค้นหาฐานข้อมูลและการค้นหา Lucene
การเปรียบเทียบ | Lucene Search | การดึงฐานข้อมูล |
การดึงข้อมูล | ตรวจสอบไฟล์ดัชนีของ Lucene | ดึงระเบียนจากดัชนีฐานข้อมูล |
โครงสร้างดัชนี | เอกสาร | บันทึก |
ผลลัพธ์การสืบค้น | HIT: องค์ประกอบเอกสารที่ตอบสนองความสัมพันธ์ | ชุดผลลัพธ์แบบสอบถาม: บันทึกที่มีคำหลัก |
ค้นหาข้อความแบบเต็ม | สนับสนุน | ไม่รองรับ |
แบบสอบถามฟัซซี่ | สนับสนุน | ไม่รองรับ |
การจัดเรียงผลลัพธ์ | ตั้งค่าน้ำหนักและการจัดเรียงสหสัมพันธ์ | ไม่สามารถจัดเรียงได้ |
1.2 โครงสร้างโดยรวมของลูซีน
รูปแบบการเปิดตัวของแพ็คเกจซอฟต์แวร์ Lucene เป็นไฟล์ JAR พร้อมการอัปเดตเวอร์ชันที่รวดเร็วและช่องว่างรุ่นใหญ่ บทความนี้ใช้เวอร์ชัน 5.3.1 และแพ็คเกจย่อยหลักที่ใช้แสดงในตารางที่ 1-2
ตารางที่ 1-2: แพคเกจย่อยและฟังก์ชั่น
ชื่อแพ็คเกจ | การทำงาน |
org.apache.lucene.analysis | คำกริยา |
org .apache.lucene .document | เอกสารสำหรับการจัดการดัชนี |
org .apache.lucene .index | การดำเนินการจัดทำดัชนีรวมถึงการเพิ่มการลบ ฯลฯ |
org.apache.lucene.QueryParser | Queryer สร้างนิพจน์การค้นหา |
org .apache.lucene .Search | การจัดการการค้นหา |
org .apache.lucene. Store | การจัดการการจัดเก็บข้อมูล |
org .apache.lucene .util | หมวดหมู่สาธารณะ |
1.3 Lucene Architecture Design
ลูซีนมีฟังก์ชั่นที่ทรงพลังมาก แต่โดยพื้นฐานแล้วส่วนใหญ่มีสองส่วน: หนึ่งคือการจัดทำดัชนีดัชนีลงในไลบรารีหลังจากเนื้อหาข้อความถูกแบ่งส่วน; อีกอย่างคือการส่งคืนผลลัพธ์ตามเงื่อนไขการสืบค้นนั่นคือเพื่อสร้างดัชนีและการสืบค้น
ดังที่แสดงในรูปที่ 1-1 บทความนี้จะส่งอินเทอร์เฟซภายนอกและแหล่งข้อมูลโดยมุ่งเน้นไปที่การจัดทำดัชนีและสอบถามเนื้อหาข้อความที่รวบรวมโดยหน้าเว็บ
รูปที่ 1-1: การออกแบบสถาปัตยกรรมของ Lucene
2 การติดตั้ง JDK และการกำหนดค่าตัวแปรสภาพแวดล้อม
1. JDK ดาวน์โหลด:
ดาวน์โหลดแพ็คเกจบีบอัดที่ตรงกับเวอร์ชันระบบบนเว็บไซต์ทางการของ Oracle และ URL มีดังนี้ คลิกติดตั้งและติดตั้งตามพรอมต์ ในระหว่างกระบวนการติดตั้งคุณจะแจ้งให้ทราบว่าจะติดตั้ง JRE หรือไม่คลิกใช่
http://www.oracle.com/technetwork/java/javase/downloads/index.html
2. ตั้งค่าตัวแปรสภาพแวดล้อม:
(1) คอมพิวเตอร์คลิกขวา =》 คุณสมบัติ =》 การตั้งค่าระบบขั้นสูง =》 ตัวแปรสภาพแวดล้อม =》 ตัวแปรระบบ =》 ใหม่ =》 java_home: เส้นทางการติดตั้ง
(2) เพิ่มใหม่ใน Path =》%java_home%/bin
3. การทดสอบนั้นสำเร็จหรือไม่:
start =》 run =》 cmd ป้อนในหน้าต่างป๊อปอัพ dos
Enter: Java -Version จะแสดงข้อมูลเวอร์ชัน
Enter: ข้อมูลการใช้งาน Javac ปรากฏใน Javac
ลักษณะที่ปรากฏดังแสดงในรูปที่ 2-1 เป็นความสำเร็จ
รูปที่ 2-1: กล่องคำสั่ง cmd ทดสอบการกำหนดค่า Java
3. เขียนรหัส Java เพื่อรับเนื้อหาเว็บ
เนื่องจาก Lucene จำเป็นต้องใช้คำศัพท์ที่แตกต่างกันสำหรับภาษาที่แตกต่างกันจึงใช้คำสกัดคำมาตรฐานเป็นภาษาอังกฤษและใช้คำศัพท์ SmartCN เป็นภาษาจีน เมื่อได้รับเว็บเพจก่อนอื่นให้รับเว็บเพจเป็นไฟล์ HTML ใน HTML การรบกวนแท็กจะส่งผลกระทบต่อผลการดึงข้อมูล ดังนั้นแท็ก HTML จะต้องถูกกำจัดและเนื้อหาข้อความจะถูกแปลงเป็นไฟล์ TXT เพื่อบันทึก ยกเว้นคำพูดของผู้มีส่วนร่วมคนอื่น ๆ ในภาษาจีนและภาษาอังกฤษนั้นเหมือนกันดังนั้นจะเลือกรหัสที่ตามมาและการสาธิตผลการทดลองใด ๆ บทความนี้เลือกเรื่องราวห้าสิบหน้าของเรื่องราวภาษาจีนและภาษาอังกฤษเป็นตัวอย่าง
การออกแบบรหัสเฉพาะมีดังนี้: url2html.java แปลง URL อินพุตเว็บเพจเป็นไฟล์ HTML และไฟล์ html2txt.java ตระหนักถึงการลบแท็กเอกสาร HTML และแปลงเป็นเอกสาร TXT รหัสเฉพาะแสดงในรูปที่ 3-1 และ 3-2
โมฆะสาธารณะ (String filepath, url string) พ่นข้อยกเว้น {ไฟล์ dest = ไฟล์ใหม่ (filepath); // สร้างไฟล์อินพุตสตรีมคือ; // รับไบต์อินพุตสตรีม FileOutputStream fos = ใหม่ fileOutputStream (dest); // byte output url url wangzhi = url ใหม่ bufferedInputStream bis = new bufferedInputStream (IS); // buffered bufferedOutputStream สำหรับสตรีมอินพุต BYTE bos = ใหม่ bufferedOutputStream (fos); // บัฟเฟอร์สตรีมเอาต์พุตไบต์/** อ่านความยาว BYTE*/int; ไบต์ [] ไบต์ = ไบต์ใหม่ [1024*20]; ในขณะที่ ((length = bis.read (ไบต์, 0, bytes.length))! = -1) {fos.write (ไบต์, 0, ความยาว); } /** ปิดกระแสบัฟเฟอร์และกระแสอินพุตและเอาต์พุต* / bos.close (); fos.close (); bis.close (); is.close (); - Public String getBody (String val) {string zyf = val.replaceall ("</? [^>]+>", ""); // ตรวจสอบ <html> แท็ก return zyf;} โมฆะสาธารณะ writetxt (สตริง str, string writepath) {ไฟล์ writename = ไฟล์ใหม่ (writepath); ลอง {writename.createnewfile (); bufferedWriter out = new BufferedWriter (ใหม่ FileWriter (Writename)); out.write (str); out.flush (); out.close (); } catch (ioexception e) {e.printstacktrace (); -การใช้หน้าเว็บของเทพนิยาย "หมาป่าโง่ ๆ ไปโรงเรียน" เป็นตัวอย่างเส้นทางเอกสารถูกตั้งค่าเป็น "e:/work/lucene/test/data/html" และ "e:/work/lucene/test/data/txt" พารามิเตอร์สองตัวที่ต้องตั้งค่าเมื่ออ่านหน้าเว็บมีชื่อชื่อไฟล์และรับ URL URL ปลายทาง สร้างฟังก์ชั่นหลักใหม่เพื่อใช้การโทรไปยังสองวิธี การใช้งานเฉพาะแสดงในรูปที่ 3-3:
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {สตริง filename = "jingdizhi"; // ชื่อไฟล์ url url = "http://www.51test.net/show/8072125.html";//web หน้า "E: // work // lucene // test // data // html //"+filename+".html"; // เขียนเส้นทางไฟล์ของ html+สตริง filename writepath = "// work // lucene // test // data // txt //"+filename+" url2html = ใหม่ url2html (); ลอง {url2html.way (firepath, url); } catch (exception e) {e.printstacktrace (); } html2txt html2txt = ใหม่ html2txt (); string read = html2txt.readfile (filepath); // อ่านสตริงไฟล์ html txt = html2txt.getbody (อ่าน); // ลบ html tag system.out.println (txt); ลอง {html2txt.writetxt (txt, writepath); } catch (exception e) {e.printstacktrace (); -หลังจากดำเนินการโปรแกรมให้สร้าง "Silly Wolf School.html" และ "Silly Wolf School.txt" ในสองโฟลเดอร์ตามลำดับ
4. สร้างดัชนี
หลักการพื้นฐานของการจัดทำดัชนีและการสืบค้นมีดังนี้:
การจัดทำดัชนี: การจัดทำดัชนีเครื่องมือค้นหาเป็นจริงเพื่อใช้โครงสร้างข้อมูลเฉพาะของ "เมทริกซ์คำว่าเอกสาร" นอกจากนี้ยังเป็นขั้นตอนแรกในการดึงข้อความแบบเต็ม Lucene จัดเตรียมคลาส Indexwriter สำหรับการจัดการดัชนีส่วนใหญ่รวมถึง Add (), DELETE () และ UPDATE () นอกจากนี้ยังมีการตั้งค่าน้ำหนัก ผ่านการตั้งค่าน้ำหนักดัชนีที่แตกต่างกันคุณสามารถกลับมาตามขนาดสหสัมพันธ์ระหว่างการค้นหา
ค้นหา: การค้นหาโดยตรงดั้งเดิมคือการค้นหาเอกสารตามลำดับ หลังจากสร้างดัชนีคุณสามารถค้นหาตำแหน่งที่คำดัชนีปรากฏในเอกสารโดยค้นหาดัชนีจากนั้นส่งคืนตำแหน่งและคำในเอกสารที่รายการดัชนีถูกต้อง Lucene ให้คลาสดัชนีผู้ค้นหาเพื่อค้นหาเอกสาร แบบฟอร์มการค้นหาส่วนใหญ่แบ่งออกเป็นสองประเภท หมวดหมู่แรกคือคำที่ค้นหารายการเทอมเดียว หมวดหมู่ที่สองคือ Parser ซึ่งสามารถปรับแต่งนิพจน์การค้นหาและมีแบบฟอร์มการค้นหาเพิ่มเติม วิธีการเฉพาะจะแสดงในภายหลัง
4.1 สภาพแวดล้อมการทดลอง
พีซีนี้ใช้ระบบ Windows 10x64, หน่วยความจำ 8G และ 256G SSD สภาพแวดล้อมการพัฒนาคือ Myeclipse 10 และรุ่น JDK คือ 1.8 ในระหว่างการทดลองเนื่องจากการเปลี่ยนแปลงทางไวยากรณ์บางส่วนมีการใช้หลายคลาสโดยใช้เวอร์ชัน 1.6
4.2 การสร้างดัชนี
การสร้างไลบรารีดัชนีคือการเพิ่มระเบียนดัชนีลงในไลบรารีดัชนี Lucene จัดเตรียมอินเทอร์เฟซเพื่อเพิ่มระเบียนดัชนีและเพิ่มดัชนี
ส่วนใหญ่ใช้สามหมวดหมู่: "Write Indexer", "Document" และ "Domain" ในการสร้างดัชนีคุณต้องสร้างวัตถุเอกสารเอกสารก่อนและกำหนดฟิลด์ต่างๆของเอกสาร สิ่งนี้คล้ายกับการจัดตั้งโครงสร้างตารางในฐานข้อมูลเชิงสัมพันธ์ เอกสารเทียบเท่ากับแถวบันทึกในตารางและฟิลด์นั้นเทียบเท่ากับคอลัมน์ในแถว ใน Lucene สำหรับคุณสมบัติและข้อกำหนดการส่งออกข้อมูลของโดเมนที่แตกต่างกันสามารถเลือกกฎของฟิลด์ดัชนี/ร้านค้าที่แตกต่างกันสำหรับโดเมน ในการทดลองนี้ชื่อไฟล์ชื่อไฟล์ไฟล์ Path FullPath และเนื้อหาข้อความจะใช้เป็นฟิลด์ของเอกสาร
Indexwriter มีหน้าที่รับผิดชอบในการรับเอกสารที่เพิ่มขึ้นใหม่และเขียนไปยังไลบรารีดัชนี เมื่อสร้าง Write Indexwriter Indexwriter คุณต้องระบุตัววิเคราะห์ภาษาที่คุณใช้ การสร้างดัชนีแบ่งออกเป็นสองประเภท: ดัชนีแรก: ดัชนีที่ไม่ได้ถ่วง; ที่สอง: ดัชนีถ่วงน้ำหนัก
Public Indexer (String Indexdir) โยนข้อยกเว้น {Directory dir = fsdirectory.open (paths.get (indexdir)); Analyzer Analyzer = New Standardanalyzer (); // ตัวแบ่งคำมาตรฐาน // smartchineseanalyzer analyzer = ใหม่ smartchineseanalyzer (); IndexWriterConfig IWC = ใหม่ IndexWriterConfig (ตัววิเคราะห์); Writer = New Indexwriter (Dir, IWC); -ตั้งค่าฟิลด์ดัชนีและร้านค้าระบุว่าเนื้อหาดัชนีถูกเก็บไว้หรือไม่: ชื่อไฟล์และ FullPath ใช้หน่วยความจำน้อยลงและสามารถเก็บไว้เพื่ออำนวยความสะดวกในการกลับมาสืบค้น
เอกสารส่วนตัว getDocument (ไฟล์ f) พ่นข้อยกเว้น {เอกสารเอกสาร = เอกสารใหม่ (); doc.add (New TextField ("สารบัญ", filereader ใหม่ (f))); doc.add (New TextField ("ชื่อไฟล์", f.getName (), store.yes)); doc.add (New TextField ("FullPath", F.GetCanonicalPath (), store.yes)); // ดัชนีพา ธ ส่งคืน DOC; -ผลลัพธ์หลังจากดำเนินการรหัสหลักจะแสดงในรูป: เมื่อทำการจัดทำดัชนีไฟล์การออกแบบจะส่งคืนไฟล์ "ดัชนีไฟล์: + พา ธ ไฟล์" และคำนวณเวลาที่ใช้ในการส่งออกดัชนีของไฟล์ทั้งหมด
4.3 ลบและแก้ไขดัชนี
โดยทั่วไปการดำเนินการในฐานข้อมูลรวมถึง CRUD (เพิ่ม, ลบ, การเปลี่ยนแปลง, การสืบค้น) การเพิ่มหมายถึงการเลือกและสร้างรายการดัชนี แบบสอบถามเป็นฟังก์ชั่นหลักมากขึ้นจะมีการหารือในภายหลัง ที่นี่เราบันทึกวิธีการที่ใช้เป็นหลักเมื่อลบและอัปเดตดัชนี
การลบแบ่งออกเป็นสองประเภทรวมถึงการลบปกติและการลบที่สมบูรณ์เนื่องจากการลบดัชนีมีผลต่อฐานข้อมูลทั้งหมด ยิ่งไปกว่านั้นสำหรับระบบขนาดใหญ่การลบดัชนีหมายถึงการเปลี่ยนเลเยอร์พื้นฐานของระบบซึ่งใช้เวลานานและใช้แรงงานมากและไม่สามารถส่งคืนได้ เมื่อดัชนีได้รับการจัดทำดัชนีครั้งแรกไฟล์ขนาดเล็กหลายไฟล์ถูกสร้างขึ้นหลังจากดัชนีถูกสร้างขึ้น เมื่อค้นหาแต่ละไฟล์จะถูกรวมเข้าด้วยกันแล้วค้นหา การลบปกติเป็นเพียงการทำเครื่องหมายง่าย ๆ ของดัชนีที่จัดตั้งขึ้นก่อนหน้านี้ซึ่งทำให้ไม่สามารถค้นหาและส่งคืนได้ การลบที่สมบูรณ์หมายถึงการทำลายดัชนีและไม่สามารถเพิกถอนได้ นำตัวอย่างของการลบดัชนีด้วยรายการดัชนี "id" ของ 1:
การลบปกติ (ลบก่อนผสาน):
Writer.DeletEdocuments (คำศัพท์ใหม่ ("ID", "1")); Writer.Commit ();ลบอย่างสมบูรณ์ (ลบหลังจากผสาน):
Writer.deletEdocuments (คำศัพท์ใหม่ ("ID", "1")); Writer.forceMerGeDeletes (); // force delete writer.commit ();หลักการของการปรับเปลี่ยนดัชนีนั้นค่อนข้างง่ายซึ่งคือการใช้ความครอบคลุมบนพื้นฐานของดัชนีดั้งเดิม รหัสการใช้งานนั้นเหมือนกับการเพิ่มดัชนีในข้อความด้านบน ฉันจะไม่อธิบายที่นี่
4.4 การถ่วงน้ำหนักของดัชนี
Lucene จัดเรียงตามความเกี่ยวข้องตามค่าเริ่มต้น Lucene จัดเตรียมฟิลด์ด้วยพารามิเตอร์การเพิ่มที่สามารถตั้งค่าได้ พารามิเตอร์นี้ใช้เพื่อระบุความสำคัญของบันทึก เมื่อมีการปฏิบัติตามเงื่อนไขการค้นหาบันทึกที่มีความสำคัญสูงจะได้รับความสำคัญและผลตอบแทนจะได้รับการเติม หากมีบันทึกจำนวนมากบันทึกที่มีน้ำหนักต่ำจะอยู่ในอันดับหลังหน้าแรก ดังนั้นการดำเนินการถ่วงน้ำหนักในดัชนีจึงเป็นปัจจัยสำคัญที่มีผลต่อความพึงพอใจของผลตอบแทน เมื่อออกแบบระบบข้อมูลจริง ๆ ควรมีสูตรการคำนวณน้ำหนักที่เข้มงวดเพื่ออำนวยความสะดวกในการเปลี่ยนแปลงน้ำหนักสนามและตอบสนองความต้องการของผู้ใช้ได้ดีขึ้น
ตัวอย่างเช่นเครื่องมือค้นหาจะมีอัตราการคลิกสูงและหน้าเว็บที่เชื่อมโยงและออกจะได้รับการจัดอันดับหน้าแรกเมื่อพวกเขากลับมา รหัสการใช้งานแสดงในรูปที่ 4-1 และคู่ผลลัพธ์ที่ถ่วงน้ำหนักแบบไม่ถ่วงน้ำหนักจะแสดงในรูปที่ 4-2
ฟิลด์ textfield = New TextField ("FullPath", F.GetCanonicalPath (), store.yes); if ("a great grief.txt" .equals (f.getName ())) {field.setBoost (2.0f); // น้ำหนักเส้นทางเต็มเส้นทางด้วยชื่อไฟล์ที่สอง Story.txt; } // น้ำหนักเริ่มต้นคือ 1.0 และเปลี่ยนเป็น 1.2 เพื่อเพิ่มน้ำหนัก doc.add (ฟิลด์);รูปที่ 4-1: การถ่วงน้ำหนักดัชนี
รูปที่ 4-2: ก่อนถ่วงน้ำหนัก
รูปที่ 4-2: หลังถ่วงน้ำหนัก
ดังที่เห็นได้จากผลลัพธ์ของรูปที่ 4-2 เมื่อถ่วงน้ำหนักมันจะถูกส่งคืนตามลำดับพจนานุกรม ดังนั้นก่อนที่สองครั้งแรกจะถ่วงน้ำหนักและลำดับของไฟล์ที่ชื่อที่สองจะเปลี่ยนไปเมื่อผลตอบแทนถูกส่งคืนโดยตระหนักถึงการทดสอบน้ำหนัก
5 ดำเนินการค้นหา
อินเทอร์เฟซการค้นหาของ Lucene ส่วนใหญ่ประกอบด้วยสามคลาส: QueryParser, IndexSearcher และ HITS QueryParser เป็นตัวแยกวิเคราะห์แบบสอบถามรับผิดชอบในการแยกวิเคราะห์คำค้นหาแบบสอบถามที่ส่งโดยผู้ใช้ เมื่อสร้างตัวแยกวิเคราะห์ใหม่คุณต้องระบุโดเมนที่จะแยกวิเคราะห์และเครื่องวิเคราะห์ภาษาที่จะใช้ เครื่องวิเคราะห์ภาษาที่ใช้ที่นี่จะต้องเหมือนกับตัวแยกวิเคราะห์ที่ใช้เมื่อมีการสร้างไลบรารีดัชนีมิฉะนั้นผลลัพธ์การสืบค้นจะไม่ถูกต้อง IdexSearcher เป็นผู้ค้นหาดัชนี เมื่ออินสแตนซ์ดัชนีผู้ค้นหาคุณจะต้องระบุไดเรกทอรีที่อยู่ในห้องสมุดดัชนี IndexSearcher มีวิธีการค้นหาเพื่อทำการค้นหาดัชนี วิธีนี้ยอมรับการสืบค้นเป็นพารามิเตอร์และส่งคืนการเข้าชม HISTS เป็นชุดของชุดของผลลัพธ์การสืบค้นที่เรียงลำดับ องค์ประกอบของคอลเลกชันคือเอกสาร ด้วยวิธีการรับเอกสารคุณสามารถรับข้อมูลเกี่ยวกับไฟล์ที่สอดคล้องกับเอกสารนี้เช่น: ชื่อไฟล์, เส้นทางไฟล์, เนื้อหาไฟล์ ฯลฯ
5.1 แบบสอบถามพื้นฐาน
ดังที่แสดงในรูปมีสองวิธีหลักในการสืบค้น แต่ขอแนะนำให้ใช้การแสดงออกประเภทแรกของการสร้างนิพจน์ QueryParser ซึ่งสามารถมีการผสมผสานที่ยืดหยุ่นได้รวมถึงการแสดงออกทางตรรกะแบบบูลีนการจับคู่ฟัซซี่ ฯลฯ
1. สร้างแบบสอบถาม QueryParser:
QueryParser Parser = ใหม่ QueryParser ("FullPath", Analyzer); Query Query = parser.parse (q);2. แบบสอบถามสำหรับรายการเฉพาะ:
เทอม t = คำศัพท์ใหม่ ("ชื่อไฟล์", q); แบบสอบถามแบบสอบถาม = new termQuery (t);ผลลัพธ์แบบสอบถามแสดงในรูปที่ 5-1: ใช้ชื่อไฟล์ชื่อไฟล์แบบสอบถามที่มี "ใหญ่" เป็นตัวอย่าง
รูปที่ 5-1: ผลลัพธ์การสืบค้น "ใหญ่"
5.2 แบบสอบถามฟัซซี่
เมื่อสร้าง QueryParser การจับคู่ที่แม่นยำและการจับคู่ที่คลุมเครือสามารถทำได้โดยการปรับเปลี่ยนคำว่า Q การจับคู่ฟัซซี่ได้รับการแก้ไขโดยการเพิ่ม "~" หลังจาก "Q" ดังแสดงในรูปที่ 5-2:
รูปที่ 5-2: การจับคู่ฟัซซี่
5.3 แบบสอบถามเงื่อนไขที่ผ่านการรับรอง
แบบสอบถามเชิงตรรกะของบูลีนและแบบสอบถามฟัซซี่ต้องเปลี่ยนคำสืบค้น Q ในขณะที่แบบสอบถามแบบ จำกัด เงื่อนไขจำเป็นต้องตั้งค่าการแสดงออกแบบสอบถามซึ่งส่วนใหญ่แบ่งออกเป็นหมวดหมู่ต่อไปนี้:
เป็นการค้นหาช่วงรายการที่ระบุช่วงหมายเลขที่ระบุสตริงที่ระบุเริ่มต้นและแบบสอบถามหลายเงื่อนไขซึ่งแสดงรายการแบบสอบถามที่ใช้ตามลำดับ พารามิเตอร์ที่แท้จริงหมายถึงว่ามีการรวมขีด จำกัด บนและล่างหรือไม่
ระบุช่วงรายการ:
TermRangeQuery Query = new TermRangeQuery ("desc", bytesref ใหม่ ("b" .getBytes ()), bytesref ใหม่ ("c" .getBytes ()), จริง, จริง);ระบุช่วงจำนวน:
NumericRangeQuery <integer> query = numericRangeQuery.newIntrange ("id", 1, 2, true, true);ระบุจุดเริ่มต้นของสตริง:
PrefixQuery Query = new PrefixQuery (คำศัพท์ใหม่ ("เมือง", "A"));แบบสอบถามหลายเงื่อนไข:
NumericRangeQuery <integer> query1 = numericRangeQuery.newIntrange ("id", 1, 2, จริง, จริง); prefixQuery query2 = prefixQuery ใหม่ (คำศัพท์ใหม่ ("เมือง", "a")); booleanQuery.builder (); booleanQuery.add (query1, booleanclause.occur.must); booleanQuery.add (query2, booleanclause.occur.must);5.4 ไฮไลต์แบบสอบถาม
ในเครื่องมือค้นหาเช่น Baidu และ Google เมื่อสอบถามหน้าเว็บที่ส่งคืนจะแสดงเป็นสีแดงเมื่อมีคำค้นหาแบบสอบถามและจะแสดงในสรุปนั่นคือเนื้อหาบางส่วนที่มีคำหลักจะถูกสกัดกั้นและส่งคืน ไฮไลต์แบบสอบถามคือการตระหนักถึงการเปลี่ยนแปลงสไตล์เป็นคำหลัก การทดลองนี้ดำเนินการใน myeclipse จะไม่มีการเปลี่ยนแปลงสไตล์เมื่อส่งคืนผลลัพธ์ มันจะเพิ่มแท็ก HTML ลงในคำหลักที่ส่งคืนเนื้อหาเท่านั้น หากแสดงบนหน้าเว็บการเปลี่ยนแปลงสไตล์จะเกิดขึ้น
รหัสการตั้งค่าที่ไฮไลต์แสดงในรูปที่ 5-3 และผลลัพธ์จะแสดงในรูปที่ 5-4 คำที่จับคู่หนานจิงจะถูกเพิ่มและติดป้ายซึ่งจะเป็นตัวหนาและสีแดงเมื่อแสดงบนหน้าเว็บ
ผู้ทำคะแนน QueryScorer = ใหม่ queryScorer (Query); Fragmenter Fragmenter = ใหม่ SimpLespanFragmenter (Scorer); Simplehtmlformatter Simplehtmlformatter = ใหม่ SimpleHtmlformatter ("<b> <font color = 'red'>" ผู้ทำคะแนน); Highlighter.SettextFragmenter (Fragmenter);รูปที่ 5-3: ไฮไลต์การตั้งค่า
รูปที่ 5-4: เน้นผลลัพธ์
6 ปัญหาและข้อบกพร่องที่พบในระหว่างการทดลอง
เวอร์ชัน Lucene ได้รับการอัปเดตอย่างรวดเร็วและจำเป็นต้องมีการเชื่อมต่อที่ดีระหว่างเวอร์ชัน JDK เวอร์ชัน Eclipse และเวอร์ชัน Lucene มิฉะนั้นจะทำให้เกิดความเข้ากันไม่ได้มาก มีปัญหามากมายในเวอร์ชันการดีบักและการเลือก JDK1.6 และ JDK1.8 ตัวอย่างเช่นวิธีการผนวกในการรวบรวมข้อมูลเว็บถูกลบในเวอร์ชัน 1.8 และไม่สามารถใช้งานได้ อย่างไรก็ตามการอ่าน FSDIRECTORY.OPEN () การอ่าน Path Force
ข้อบกพร่องของการทดลองนี้ส่วนใหญ่สะท้อนให้เห็นใน:
รหัสมีความยืดหยุ่นน้อยกว่า เมื่อคลานหน้าเว็บมันจะต้องทำด้วยตนเองและต้องทำแยกต่างหากเป็นภาษาจีนและภาษาอังกฤษ รหัสควรได้รับการปรับปรุงเพื่อให้มีการตัดสินเกี่ยวกับภาษาของหน้าเว็บและจากนั้นจะเลือกและเรียกใช้งาน segmenters คำต่าง ๆ โดยอัตโนมัติ
รหัสมีความสามารถในการนำกลับมาใช้ใหม่ต่ำและไม่มีการจำแนกประเภทที่สมเหตุสมผลและการก่อสร้างวิธีการอีกต่อไป เพื่อความเรียบง่ายเอฟเฟกต์นั้นทำได้โดยการใส่คำอธิบายประกอบและการทำเครื่องหมายในรหัสแกนกลางหลายรายการซึ่งจำเป็นต้องปรับปรุง
รหัสอยู่ในระดับต่ำในการพกพาและการรวบรวมข้อมูลหน้าเว็บใช้เวอร์ชัน JDK1.6 และการใช้งานของ Lucene ใช้เวอร์ชัน JDK1.8 เมื่อส่งออกไปยังเครื่องอื่น ๆ สภาพแวดล้อมจะต้องมีการแก้ไขและกำหนดค่าเล็กน้อยและไม่สามารถดำเนินการกับคลิกเดียวได้
7 สรุป
ตามหลักการของ Lucene บทความนี้เข้าใจความคิดและวิธีการค้นหาข้อความเต็มรูปแบบและดำเนินการทดลองและการทดสอบเกี่ยวกับฟังก์ชั่นที่ใช้กันทั่วไป ในระหว่างการทดลองฉันได้เรียนรู้เกี่ยวกับหลักการของเครื่องมือค้นหาและมีประสบการณ์ที่ดีกว่าตามเนื้อหาของหลักสูตรการดึงข้อมูล Lucene เป็นเฟรมเวิร์กเทคโนโลยีการค้นหาข้อความแบบเต็มโอเพนซอร์สที่ยอดเยี่ยม จากการวิจัยเชิงลึกเกี่ยวกับเรื่องนี้เราคุ้นเคยกับกลไกการใช้งานมากขึ้น ในกระบวนการศึกษาเราได้เรียนรู้วิธีการเขียนโปรแกรมเชิงวัตถุจำนวนมากและแนวคิด กรอบระบบที่ดีและความสามารถในการปรับขนาดได้นั้นคุ้มค่าที่จะเรียนรู้