วิธีเพิ่มประสิทธิภาพ 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 ในโปรเจกต์ของคุณ, ทำตามขั้นตอนต่อไปนี้:

  1. เพิ่ม Dependency: ตามที่แสดงด้านบน, เพิ่ม Maven dependency ที่จำเป็นในโปรเจกต์ของคุณหรือดาวน์โหลดโดยตรงจากหน้าปล่อยเวอร์ชัน.
  2. License Acquisition:
    • ทดลองใช้ฟรี – ไม่ต้องใช้คีย์ลิขสิทธิ์, แต่การใช้งานจำกัดที่ 500 เอกสารต่อวัน.
    • ลิขสิทธิ์ชั่วคราว – ขอคีย์ทดลองใช้งาน 30 วันจาก GroupDocs Temporary License.
    • ลิขสิทธิ์เต็ม – ซื้อลิขสิทธิ์การผลิตเพื่อการเข้าถึงไม่จำกัดและการสนับสนุนระดับแรก.
  3. Basic Initialization and Setup:
    Initialize the configuration using the Configuration class, 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:

  1. การจัดการเอกสารระดับองค์กร – จัดการคลังข้อมูล 10 TB+ ด้วยเวลาตอบสนองการสอบถามระดับมิลลิวินาทีหลังจากเพิ่มประสิทธิภาพ shards.
  2. แพลตฟอร์มอีคอมเมิร์ซ – รองรับการค้นหาผลิตภัณฑ์ใน 1 ล้าน SKU, ลดความหน่วงเวลาถึง 45 % เมื่อทำการเพิ่มประสิทธิภาพ shards.
  3. บริษัทกฎหมาย – ดึงไฟล์คดีจากคลังข้อมูล 200 GB ภายในไม่เกิน 200 ms.
  4. ระบบห้องสมุด – รองรับการค้นหาคาตาล็อกสำหรับหนังสือดิจิทัล 500 k รายการด้วยการใช้หน่วยความจำที่มีประสิทธิภาพ.
  5. ระบบจัดการเนื้อหา (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

บทเรียนที่เกี่ยวข้อง