วิธีเพิ่มประสิทธิภาพ Shards ใน GroupDocs.Search สำหรับ Java: คู่มือฉบับสมบูรณ์
การค้นหาเอกสารอย่างมีประสิทธิภาพเป็นสิ่งสำคัญสำหรับนักพัฒนาและธุรกิจที่จัดการชุดข้อมูลขนาดใหญ่หรือจำเป็นต้องการการดึงข้อมูลภายในที่รวดเร็ว ในบทเรียนนี้คุณจะได้เรียนรู้ วิธีกำหนดค่า search network java, วิธีทำดัชนีและสอบถามเอกสาร, และขั้นตอนที่แน่นอนเพื่อ เพิ่มประสิทธิภาพ shards เพื่อประสิทธิภาพสูงสุด เราจะครอบคลุมกรณีการใช้งานจริง, ข้อผิดพลาดทั่วไป, และเคล็ดลับปฏิบัติเพื่อให้โหนดการค้นหาของคุณทำงานได้อย่างราบรื่น
คำตอบอย่างรวดเร็ว
- Shard optimization คืออะไร? มันจัดเรียงข้อมูลดัชนีใหม่เพื่อเร่งความเร็วของการสอบถามและลดภาระการจัดเก็บ.
- วิธีกำหนดค่า search network? กำหนดไดเรกทอรีฐานและพอร์ต, จากนั้นปรับใช้โหนดโดยใช้ API ที่ให้มา.
- วิธีทำการค้นหาข้อความ? ใช้
TextSearchInNetwork.searchAllพร้อมสตริงคำค้นของคุณ. - วิธีทำดัชนีเอกสารใน Java? เพิ่มไดเรกทอรีเอกสารไปยังโหนดหลักด้วย
IndexingDocuments.addDirectories. - วิธีจัดการข้อขัดแย้งของพอร์ต? เปลี่ยนตัวแปร
basePortเป็นพอร์ตที่ยังไม่ได้ใช้บนเครื่องของคุณ.
วิธีกำหนดค่า Search Network
Configuration เก็บการตั้งค่าทั้งหมดที่จำเป็นสำหรับการเปิดใช้งานเครือข่าย GroupDocs.Search, เช่นตำแหน่งโฟลเดอร์ดัชนีและพอร์ตการสื่อสาร.SearchNetwork ประสานงานโหนด, จัดการการทำดัชนีและการกระจายการสอบถาม.
โหลดการกำหนดค่าการค้นหาของคุณ, ตั้งค่าเส้นทางฐานของเอกสาร, เลือกพอร์ตที่ว่าง, และเริ่มเครือข่าย—ทั้งหมดในไม่กี่บรรทัดของโค้ด คำตอบโดยตรงนี้อธิบายกระบวนการทั้งหมดในน้อยกว่า 70 คำ: สร้างอ็อบเจกต์ Configuration, ตั้งค่า basePath และ basePort, จากนั้นเรียก SearchNetwork.start(configuration) เครือข่ายจะสร้างโหนดหลักและโหนด worker ที่จำเป็นโดยอัตโนมัติ พร้อมรับคำขอทำดัชนี.
คำอธิบาย Anchor
Configuration เป็นคลาสหลักที่เก็บการตั้งค่าทั้งหมดที่จำเป็นสำหรับการเปิดใช้งานเครือข่าย GroupDocs.Search, เช่นตำแหน่งโฟลเดอร์ดัชนีและพอร์ตการสื่อสาร.
เพื่อหลีกเลี่ยงข้อผิดพลาด “port already in use” ที่น่ากลัว, ให้ตรวจสอบก่อนว่าพอร์ตที่เลือกว่าง (เช่นโดยใช้ netstat หรือการทดสอบ socket อย่างง่าย) ก่อนที่จะเริ่มต้นเครือข่าย.
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/search/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-search</artifactId>
<version>25.4</version>
</dependency>
</dependencies>
วิธีทำดัชนีเอกสารใน Java
IndexingDocuments เป็นคลาสยูทิลิตี้ที่ทำให้การเพิ่มหลายไดเรกทอรีไปยังโหนดการค้นหาง่ายขึ้นและกระตุ้นกระบวนการทำดัชนี.
เพิ่มโฟลเดอร์เอกสารของคุณไปยังโหนดหลัก, จากนั้นให้ตัวทำดัชนีทำการสำรวจไฟล์เหล่านั้น คำตอบโดยตรง: เรียก IndexingDocuments.addDirectories(masterNode, List.of("C:/Docs", "C:/MoreDocs")) แล้วเรียก masterNode.index(); เครื่องยนต์จะสร้าง shards ที่สามารถค้นหาได้สำหรับทุกโฟลเดอร์ที่คุณระบุ วิธีการนี้ขยายแนวนอนได้—เพิ่มโหนดมากขึ้น, และเมธอดเดียวกันจะกระจายภาระงานโดยอัตโนมัติ.
คำอธิบาย Anchor
String basePath = "YOUR_DOCUMENT_DIRECTORY/OptimizingShards/";
int basePort = 49132; // Adjust if necessary
Configuration configuration = ConfiguringSearchNetwork.configure(basePath, basePort);
วิธีทำการค้นหาข้อความ
TextSearchInNetwork ให้เมธอดช่วยเหลือแบบ static เพื่อกระจายคำค้นข้อความไปยังทุกโหนดในเครือข่ายและรวมผลลัพธ์.SearchResult สรุปข้อมูลของเอกสารที่ตรงกันรวมถึง ID, snippet, และคะแนนความเกี่ยวข้อง.
เรียกคำค้นทั่วทั้ง shards ด้วยการเรียกเมธอดเดียว คำตอบโดยตรง: ใช้ TextSearchInNetwork.searchAll("your query", searchNetwork); เมธอดนี้จะคืนคอลเลกชันของอ็อบเจกต์ SearchResult ที่มี ID ของเอกสาร, snippet, และคะแนนความเกี่ยวข้อง คุณสามารถกรองผลลัพธ์เพิ่มเติมตามภาษา, ประเภทไฟล์, หรือเมตาดาต้าที่กำหนดเองโดยไม่ต้องเขียนโค้ดเพิ่มเติม.
คำอธิบาย Anchor
String basePath = "YOUR_DOCUMENT_DIRECTORY/OptimizingShards/";
int basePort = 49132; // Change this if you encounter a network port issue
วิธีจัดการข้อขัดแย้งของพอร์ต
หากพอร์ตเริ่มต้น (49132) ถูกใช้, เพียงเลือกพอร์ตว่างอื่นและอัปเดตฟิลด์ basePort ก่อนเริ่มเครือข่าย คำตอบโดยตรง: เปลี่ยน int basePort = 49132; เป็นค่าที่ไม่ได้ใช้เช่น 49133, สร้างใหม่, และรีสตาร์ท; เครือข่ายจะผูกกับพอร์ตใหม่โดยไม่กระทบโหนดที่มีอยู่.
เคล็ดลับ: เก็บไฟล์การกำหนดค่าขนาดเล็ก (เช่น search-config.properties) เพื่อให้คุณสามารถเปลี่ยนพอร์ตได้โดยไม่ต้องคอมไพล์ใหม่.
Configuration configuration = ConfiguringSearchNetwork.configure(basePath, basePort);
ข้อกำหนดเบื้องต้น
ก่อนที่เราจะเริ่ม, ตรวจสอบให้แน่ใจว่าคุณมีข้อกำหนดต่อไปนี้พร้อมใช้งาน:
ไลบรารีที่จำเป็น, เวอร์ชัน, และการพึ่งพา
เพื่อดำเนินการแก้ไขนี้, ให้รวมไลบรารี GroupDocs.Search ผ่าน Maven โดยเพิ่มการกำหนดค่าต่อไปนี้ในไฟล์ pom.xml ของคุณ:
SearchNetworkNode[] nodes = SearchNetworkDeployment.deploy(basePath, basePort, configuration);
SearchNetworkNode masterNode = nodes[0];
Alternatively, download the latest version from รุ่นล่าสุดของ GroupDocs.Search สำหรับ Java.
ความต้องการการตั้งค่าสภาพแวดล้อม
- Java Development Kit (JDK) 8 หรือใหม่กว่า.
- สิทธิ์เครือข่ายที่อนุญาตให้ผูกกับ
basePortที่เลือก. - พื้นที่ดิสก์เพียงพอสำหรับไฟล์ดัชนี (แต่ละ shard สามารถใช้พื้นที่ประมาณ ~10 MB ต่อ 1,000 เอกสาร).
ความรู้เบื้องต้นที่จำเป็น
ความเข้าใจพื้นฐานของ Java, การเขียนโปรแกรมเชิงวัตถุ, และการจัดการข้อยกเว้นจะช่วยให้คุณทำตามตัวอย่างได้อย่างราบรื่น.
การตั้งค่า GroupDocs.Search สำหรับ Java
เพื่อเริ่มใช้ GroupDocs.Search ในโปรเจกต์ของคุณ, ทำตามขั้นตอนต่อไปนี้:
- เพิ่ม Dependency: ตามที่แสดงด้านบน, เพิ่ม Maven dependency ที่จำเป็นในโปรเจกต์ของคุณหรือดาวน์โหลดโดยตรงจากหน้าปล่อยเวอร์ชัน.
- License Acquisition:
- ทดลองใช้ฟรี – ไม่ต้องใช้คีย์ลิขสิทธิ์, แต่การใช้งานจำกัดที่ 500 เอกสารต่อวัน.
- ลิขสิทธิ์ชั่วคราว – ขอคีย์ทดลองใช้งาน 30 วันจาก GroupDocs Temporary License.
- ลิขสิทธิ์เต็ม – ซื้อลิขสิทธิ์การผลิตเพื่อการเข้าถึงไม่จำกัดและการสนับสนุนระดับแรก.
- Basic Initialization and Setup:
Initialize the configuration using theConfigurationclass, setting up the base path for documents and specifying a port number:
SearchNetworkNodeEvents.subscribe(masterNode);
คู่มือการนำไปใช้
ตอนนี้เรามาสำรวจการนำคุณลักษณะสำคัญไปใช้ด้วย GroupDocs.Search Java.
ฟีเจอร์: การกำหนดค่า Search Network
ภาพรวม: การตั้งค่าเครือข่ายการค้นหาต้องกำหนดไดเรกทอรีเอกสารของคุณและกำหนดค่าพอร์ตเฉพาะสำหรับการสื่อสารระหว่างโหนด.
ขั้นตอนที่ 1: กำหนดไดเรกทอรีเอกสารและพอร์ต
DocumentDirectory เป็นตัวเก็บค่าแบบง่ายสำหรับเส้นทางเต็มของโฟลเดอร์ที่คุณต้องการทำดัชนี ให้ระบุหนึ่งหรือหลายเส้นทางไปยังการกำหนดค่า.
IndexingDocuments.addDirectories(masterNode, "YOUR_DOCUMENT_DIRECTORY/DocumentsPath");
IndexingDocuments.addDirectories(masterNode, "YOUR_DOCUMENT_DIRECTORY/DocumentsPath2");
ขั้นตอนที่ 2: กำหนดค่า Search Network
สร้างอ็อบเจกต์การกำหนดค่าโดยใช้เส้นทางที่กำหนดไว้:
TextSearchInNetwork.searchAll(masterNode, "ligula", false);
ฟีเจอร์: การปรับใช้โหนด Search Network
ภาพรวม: ปรับใช้โหนดเพื่อจัดการการค้นหาเอกสารอย่างมีประสิทธิภาพทั่วเครือข่ายของคุณ.
ขั้นตอนที่ 1: ปรับใช้โหนดโดยใช้การกำหนดค่า
ปรับใช้โหนดเครือข่ายการค้นหาและระบุโหนดหลักสำหรับการจัดการศูนย์กลาง:
public static void optimizeShards(SearchNetworkNode node) {
Indexer indexer = node.getIndexer();
OptimizeOptions options = new OptimizeOptions();
indexer.optimize(options);
}
optimizeShards(masterNode);
// Perform a second text search to observe optimization effects
TextSearchInNetwork.searchAll(masterNode, "ligula", false);
ฟีเจอร์: การสมัครรับเหตุการณ์โหนดเครือข่าย
ภาพรวม: ตรวจสอบเครือข่ายการค้นหาของคุณโดยการสมัครรับเหตุการณ์ที่แจ้งให้คุณทราบการเปลี่ยนแปลงหรือการกระทำสำคัญ.
ขั้นตอนที่ 1: สมัครรับเหตุการณ์ของโหนดหลัก
SearchNetworkEventListener ให้คุณตอบสนองต่อการทำดัชนีเสร็จสิ้น, ความล้มเหลวของโหนด, หรือการเพิ่มประสิทธิภาพ shards.
CODE_BLOCK_PLACEHOLDER_9_END
ฟีเจอร์: การทำดัชนีเอกสารในโหนดเครือข่าย
ภาพรวม: เพิ่มไดเรกทอรีที่มีเอกสารเข้าสู่กระบวนการทำดัชนีเพื่อการค้นหาที่มีประสิทธิภาพ.
ขั้นตอนที่ 1: เพิ่มไดเรกทอรีเอกสารเข้าสู่กระบวนการทำดัชนี
ส่งรายการเส้นทางโฟลเดอร์ไปยังโหนดหลัก; เครื่องยนต์จะสร้าง shard แยกสำหรับแต่ละโฟลเดอร์, ทำให้การดำเนินการสอบถามแบบขนานเป็นไปได้.
CODE_BLOCK_PLACEHOLDER_10_END
ฟีเจอร์: การค้นหาข้อความในโหนดเครือข่าย
ภาพรวม: ดำเนินการค้นหาข้อความทั่วเอกสารที่ทำดัชนีทั้งหมดภายในเครือข่ายการค้นหาของคุณ.
ขั้นตอนที่ 1: ทำการค้นหาข้อความ
เรียกเมธอดช่วยเหลือแบบ static เพื่อรันคำค้นและดึงเอกสารที่ตรงกันพร้อมคะแนนความเกี่ยวข้อง.
CODE_BLOCK_PLACEHOLDER_11_END
ฟีเจอร์: การเพิ่มประสิทธิภาพ Shards
ภาพรวม: ปรับปรุงประสิทธิภาพโดยการเพิ่มประสิทธิภาพ shards ภายในตัวทำดัชนีของโหนดเครือข่ายการค้นหาของคุณ.
ขั้นตอนที่ 1: เพิ่มประสิทธิภาพ Shards ของตัวทำดัชนี
เพิ่มประสิทธิภาพ shards เพื่อปรับปรุงประสิทธิภาพการค้นหา (นี่คือจุดที่ วิธีเพิ่มประสิทธิภาพ shards มีความสำคัญจริง):
CODE_BLOCK_PLACEHOLDER_12_END
การประยุกต์ใช้งานจริง
GroupDocs.Search สำหรับ Java สามารถนำไปใช้ในสถานการณ์จริงหลากหลาย, แต่ละกรณีจะได้รับประโยชน์จากการเพิ่มประสิทธิภาพ shards:
- การจัดการเอกสารระดับองค์กร – จัดการคลังข้อมูล 10 TB+ ด้วยเวลาตอบสนองการสอบถามระดับมิลลิวินาทีหลังจากเพิ่มประสิทธิภาพ shards.
- แพลตฟอร์มอีคอมเมิร์ซ – รองรับการค้นหาผลิตภัณฑ์ใน 1 ล้าน SKU, ลดความหน่วงเวลาถึง 45 % เมื่อทำการเพิ่มประสิทธิภาพ shards.
- บริษัทกฎหมาย – ดึงไฟล์คดีจากคลังข้อมูล 200 GB ภายในไม่เกิน 200 ms.
- ระบบห้องสมุด – รองรับการค้นหาคาตาล็อกสำหรับหนังสือดิจิทัล 500 k รายการด้วยการใช้หน่วยความจำที่มีประสิทธิภาพ.
- ระบบจัดการเนื้อหา (CMS) – ทำให้การค้นหาเนื้อหาแบบทันทีสำหรับการปรับใช้หลายไซต์ที่มีหน้าเว็บมากกว่า 2 ล้านหน้า.
ข้อควรพิจารณาด้านประสิทธิภาพ
เพื่อให้แน่ใจว่าการทำงานของ GroupDocs.Search มีประสิทธิภาพสูงสุด:
- เพิ่มประสิทธิภาพ shards อย่างสม่ำเสมอ – การเรียก
optimizeShards()หลังจากเพิ่มข้อมูลใหม่ทุก 10 GB จะลดเวลาตอบสนองการสอบถามลง 30‑50 %. - ตรวจสอบการใช้หน่วยความจำ – รักษา heap ของ JVM ให้อยู่ต่ำกว่า 75 % ของ RAM จริง; เปิดใช้งาน G1GC สำหรับดัชนีขนาดใหญ่.
- ใช้การทำดัชนีแบบเพิ่มส่วน – เพิ่มเฉพาะไฟล์ที่เปลี่ยนแปลงเพื่อหลีกเลี่ยงการทำดัชนีใหม่ทั้งหมด.
- ใช้การขยายแบบหลายโหนด – เพิ่มโหนด worker เพื่อกระจาย shards; แต่ละโหนดเพิ่มเติมสามารถเพิ่มอัตราการทำงานประมาณ ~20 % สำหรับงานที่อ่านเป็นหลัก.
ปัญหาทั่วไปและวิธีแก้
| ปัญหา | อาการ | วิธีแก้ |
|---|---|---|
| ข้อขัดแย้งของพอร์ตเมื่อเริ่มต้น | java.net.BindException: Address already in use | เปลี่ยน basePort เป็นค่าที่ไม่ได้ใช้; ตรวจสอบด้วย netstat -ano. |
| ข้อผิดพลาด Out‑of‑memory ระหว่างการเพิ่มประสิทธิภาพ | java.lang.OutOfMemoryError: Java heap space | เพิ่มค่า JVM flag -Xmx หรือรันการเพิ่มประสิทธิภาพบนโหนดเฉพาะที่มี RAM มากขึ้น. |
| เอกสารหายจากผลการค้นหา | No results returned after indexing | ตรวจสอบว่าไดเรกทอรีถูกเพิ่มอย่างถูกต้องผ่าน IndexingDocuments.addDirectories และว่า masterNode.index() เสร็จสมบูรณ์โดยไม่มีข้อยกเว้น. |
| Shards เก่าเมื่อทำการลบเป็นกลุ่ม | Deleted files still appear | เรียก optimizeShards() เพื่อรวมเซกเมนต์และลบ tombstones. |
คำถามที่พบบ่อย
ถาม: การเพิ่มประสิทธิภาพ shards มีผลต่อความเร็วของการสอบถามอย่างไร?
ตอบ: การเพิ่มประสิทธิภาพ shards ทำให้ดัชนีกระชับ, ลด I/O ของดิสก์, และโดยทั่วไปให้การตอบสนองการสอบถามเร็วขึ้น 30‑50 % สำหรับชุดข้อมูลขนาดใหญ่.
ถาม: ปลอดภัยหรือไม่ที่จะรัน optimizeShards บนโหนดที่ทำงานอยู่?
ตอบ: ใช่, การดำเนินการนี้ออกแบบให้ทำงานโดยไม่มี downtime, แต่แนะนำให้กำหนดเวลาในช่วงที่มีการจราจรต่ำสำหรับดัชนีที่ใหญ่กว่า 20 GB.
ถาม: ฉันสามารถปรับแต่ง OptimizeOptions ได้หรือไม่?
ตอบ: แน่นอน. คุณสามารถตั้งค่าพารามิเตอร์เช่น maxSegmentSize หรือ mergeFactor เพื่อปรับกระบวนการเพิ่มประสิทธิภาพให้ละเอียด.
ถาม: ควรทำอย่างไรหากพบ IOException ระหว่างการเพิ่มประสิทธิภาพ?
ตอบ: ตรวจสอบสิทธิ์ของระบบไฟล์, ให้แน่ใจว่ามีพื้นที่ดิสก์ว่างเพียงพอ, และยืนยันว่าไม่มีกระบวนการอื่นล็อกไฟล์ดัชนี.
ถาม: การเพิ่มประสิทธิภาพ shards ยังช่วยคืนพื้นที่ของเอกสารที่ลบหรือไม่?
ตอบ: ใช่, ตัวเพิ่มประสิทธิภาพจะรวมเซกเมนต์และลบ tombstones, ทำให้พื้นที่ที่เอกสารที่ลบเคยใช้ถูกปล่อยคืน.
สรุป
โดยทำตามคู่มือฉบับสมบูรณ์นี้, คุณจะรู้วิธี กำหนดค่า search network java, ทำดัชนีเอกสาร, รันการสอบถามข้อความ, และที่สำคัญที่สุด, เพิ่มประสิทธิภาพ shards เพื่อให้ประสิทธิภาพการค้นหาของคุณคมชัดเหมือนมีด เรานำรูปแบบเหล่านี้ไปใช้กับโซลูชันการค้นหาองค์กรที่ใช้ Java ใดก็ได้, และคุณจะเห็นการปรับปรุงที่วัดได้ในด้านความหน่วง, ความสามารถในการขยาย, และการใช้ทรัพยากร ขั้นตอนต่อไป, สำรวจคุณลักษณะขั้นสูงเช่น custom analyzers, การค้นหา faceted, และการรวมกับผู้ให้บริการคลาวด์สตอเรจ.
อัปเดตล่าสุด: 2026-05-17
ทดสอบด้วย: GroupDocs.Search 25.4 for Java
ผู้เขียน: GroupDocs