ค้นหาตามแอตทริบิวต์ Java ด้วยคู่มือ GroupDocs.Search
ในแอปพลิเคชันที่เน้นเอกสารสมัยใหม่ คุณมักต้องการค้นหาไฟล์ไม่เพียงตามเนื้อหาข้อความเท่านั้น แต่ยังตามเมตาดาต้ากำหนดเอง เช่น แผนก ระดับความลับ หรือวันที่สร้าง Search by attribute java ให้ความสามารถนี้ในคำค้นเดียวที่มีประสิทธิภาพสูง ในบทแนะนำนี้คุณจะได้เห็นวิธีอัปเดตแอตทริบิวต์เป็นชุดบนไฟล์ที่ได้ทำการจัดทำดัชนีแล้ว การแทรกแอตทริบิวต์ระหว่างการทำดัชนี และการสืบค้นเอกสารตามเมตาดาต้าอย่างมีประสิทธิภาพโดยใช้ไลบรารี GroupDocs.Search for Java
คำตอบอย่างรวดเร็ว
- อะไรคือ “search by attribute java”? มันช่วยให้คุณกรองผลการค้นหาด้วยเมตาดาต้าคีย์‑ค่า ที่แนบกับเอกสารแต่ละรายการที่ทำการจัดทำดัชนี
- ฉันสามารถแก้ไขแอตทริบิวต์หลังจากทำดัชนีได้หรือไม่? ได้ – ใช้
AttributeChangeBatchเพื่อทำการเปลี่ยนแปลงเป็นชุดโดยไม่ต้องสร้างดัชนีใหม่ทั้งหมด - ฉันจะเพิ่มแอตทริบิวต์ระหว่างการทำดัชนีอย่างไร? ลงทะเบียนตัวจัดการสำหรับเหตุการณ์
FileIndexingและตั้งค่าแอตทริบิวต์โดยโปรแกรมสำหรับแต่ละไฟล์ - ฉันต้องการไลเซนส์หรือไม่? การทดลองใช้ฟรีสามารถใช้งานเพื่อประเมินผลได้; จำเป็นต้องมีไลเซนส์ถาวรสำหรับการใช้งานในสภาพแวดล้อมการผลิต
- ต้องการเวอร์ชัน Java ใด? แนะนำให้ใช้ Java 8 หรือใหม่กว่า
“search by attribute java” คืออะไร?
Search by attribute java ทำให้คุณสามารถสืบค้นเอกสารโดยอิงเมตาดาต้ากำหนดเอง (แอตทริบิวต์) แทนที่จะเป็นเพียงเนื้อหาข้อความ วิธีนี้ทำให้ชุดผลลัพธ์แคบลงอย่างมาก ลดการจราจรของเครือข่าย และเร่งความเร็วในการตอบสนอง เนื่องจากเอนจินประเมินตัวกรองแอตทริบิวต์ก่อนทำการสแกนข้อความเต็ม
ทำไมต้องใช้การแท็กเมตาดาต้าแบบไดนามิก?
การแท็กเมตาดาต้าแบบไดนามิกทำให้คุณสามารถกำหนด, อัปเดต, และจัดการแอตทริบิวต์กำหนดเองสำหรับเอกสารโดยไม่ต้องทำการจัดทำดัชนีใหม่ ให้การจัดประเภทที่ยืดหยุ่นซึ่งปรับตัวตามกฎธุรกิจที่เปลี่ยนแปลง, ปรับปรุงประสิทธิภาพการค้นหา, และลดความจำเป็นในการย้ายข้อมูลที่มีค่าใช้จ่ายสูงในคลังข้อมูลขนาดใหญ่ ในขณะเดียวกันยังคงรักษาการปฏิบัติตามและความสามารถในการตรวจสอบ
- Dynamic categorization – รักษาเมตาดาต้าให้สอดคล้องกับกฎธุรกิจที่พัฒนา
- Faster filtering – ตัวกรองแอตทริบิวต์จะถูกประเมินก่อนการค้นหาข้อความเต็ม, เพิ่มความเร็วในการตอบสนอง
- Compliance tracking – แท็กเอกสารสำหรับนโยบายการเก็บรักษาหรือข้อกำหนดการตรวจสอบ
- Batch update attributes – เปลี่ยนแปลงเอกสารหลายรายการในหนึ่งการดำเนินการโดยไม่ต้องทำการจัดทำดัชนีทั้งหมดใหม่
ข้อกำหนดเบื้องต้น
- Java 8+ (JDK 8 หรือใหม่กว่า)
- GroupDocs.Search for Java library (ดูการตั้งค่า Maven ด้านล่าง)
- ความคุ้นเคยพื้นฐานกับคอลเลกชันของ Java และการจัดการข้อยกเว้น
การตั้งค่า GroupDocs.Search สำหรับ Java
การตั้งค่า Maven
เพิ่มรีโพซิทอรีของ GroupDocs และการพึ่งพาในไฟล์ pom.xml ของคุณ:
<repositories>
<repository>
<id>groupdocs-releases</id>
<url>https://repo.groupdocs.com/maven</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-search</artifactId>
<version>25.4</version>
</dependency>
</dependencies>
ดาวน์โหลดโดยตรง
หรือคุณสามารถดาวน์โหลดเวอร์ชันล่าสุดจาก GroupDocs.Search for Java releases. หากคุณไม่ต้องการใช้ Maven ให้รับไฟล์ JAR จาก GroupDocs website.
การรับไลเซนส์
- เริ่มต้นด้วยการทดลองใช้ฟรีเพื่อสำรวจความสามารถ
- สำหรับการใช้งานต่อเนื่อง, รับไลเซนส์ชั่วคราวหรือเต็มผ่าน license page
การเริ่มต้นพื้นฐาน
// Initialize the search index folder
String indexFolder = "C:/search_index";
Index index = new Index(indexFolder);
// Apply license if you have one
License license = new License();
license.setLicense("C:/licenses/groupdocs.lic");
วิธีแก้ไขแอตทริบิวต์ของเอกสาร (อัปเดตเป็นชุด)
เพื่อแก้ไขแอตทริบิวต์ของเอกสารหลังจากที่ได้ทำการจัดทำดัชนีแล้ว คุณสามารถใช้ API AttributeChangeBatch เพื่อทำการอัปเดตเป็นชุด วิธีนี้จะอัปเดตเมตาดาต้าของไฟล์ที่เลือกในธุรกรรมเดียว ลดภาระการทำดัชนีใหม่ทั้งหมดและรักษาดัชนีข้อความเต็มไว้
Direct answer: ใช้ AttributeChangeBatch เพื่อรวมการเพิ่ม, การลบ, หรือการแทนที่เมตาดาต้าเป็นการดำเนินการแบบอะตอมิกเดียว แล้วทำการคอมมิตชุดนั้นไปยังดัชนี วิธีนี้จะอัปเดตแอตทริบิวต์ของเอกสารหลายรายการในหนึ่งขั้นตอนพร้อมคงดัชนีข้อความเต็มที่มีอยู่
ขั้นตอน 1: เพิ่มเอกสารไปยังดัชนี
index.add("C:/docs/contract1.pdf");
index.add("C:/docs/report2.docx");
ขั้นตอน 2: ดึงข้อมูลเอกสารที่ทำดัชนีแล้ว
DocumentInfo info = index.getDocumentInfo("contract1.pdf");
System.out.println("Current attributes: " + info.getAttributes());
ขั้นตอน 3: อัปเดตแอตทริบิวต์ของเอกสารเป็นชุด
คลาส AttributeChangeBatch จะรวมการแก้ไขแอตทริบิวต์หลายรายการเป็นการดำเนินการแบบอะตอมิกเดียว ลดภาระ I/O และรับประกันความสอดคล้องของดัชนี
AttributeChangeBatch batch = new AttributeChangeBatch();
batch.addAttribute("contract1.pdf", "department", "Legal");
batch.removeAttribute("report2.docx", "confidential");
batch.replaceAttribute("report2.docx", "status", "archived", "active");
index.applyAttributeChanges(batch);
ขั้นตอน 4: ค้นหาด้วยตัวกรองแอตทริบิวต์
SearchOptions options = new SearchOptions();
options.addAttributeFilter("department", "Legal");
SearchResult result = index.search("agreement", options);
System.out.println("Found " + result.getCount() + " legal documents.");
วิธีเพิ่มแอตทริบิวต์ระหว่างการทำดัชนี
การเพิ่มแอตทริบิวต์ระหว่างกระบวนการทำดัชนีทำให้แน่ใจว่าแต่ละเอกสารจะได้รับเมตาดาต้าที่จำเป็นตั้งแต่ต้น ด้วยการจัดการเหตุการณ์ FileIndexing คุณสามารถแนบคู่คีย์‑ค่าให้กับอ็อบเจ็กต์ DocumentInfo แต่ละรายการก่อนที่เอนจินจะประมวลผลไฟล์, รับประกันว่ามีแอตทริบิวต์พร้อมใช้งานอย่างสม่ำเสมอสำหรับการค้นหาต่อไป
Direct answer: สมัครรับเหตุการณ์ FileIndexing ก่อนเพิ่มไฟล์; ในตัวจัดการเหตุการณ์ให้เรียก addAttribute บนวัตถุ DocumentInfo เพื่อแนบคู่คีย์‑ค่า, แล้วให้ดัชนีดำเนินการประมวลผลไฟล์ต่อ
ขั้นตอน 1: สมัครรับเหตุการณ์ FileIndexing
เหตุการณ์ FileIndexing จะถูกเรียกสำหรับแต่ละไฟล์เมื่อเพิ่มเข้าไปในดัชนี, ทำให้คุณสามารถแทรกเมตาดาต้ากำหนดเองได้
index.getEvents().FileIndexing.add(event -> {
// Example: set department based on folder name
String folder = new File(event.getFilePath()).getParentFile().getName();
event.getDocumentInfo().addAttribute("department", folder);
});
ขั้นตอน 2: ทำดัชนีเอกสาร
index.add("C:/incoming/hr/policy.pdf");
index.add("C:/incoming/finance/budget.xlsx");
การประยุกต์ใช้ในเชิงปฏิบัติ
- Document management systems – แท็กไฟล์โดยอัตโนมัติเมื่อรับเข้า, ทำให้การนำทางแบบ facet ทำได้ทันที
- Large content archives – ผสานตัวกรองแอตทริบิวต์กับการค้นหาข้อความเต็มเพื่อลดเวลาคำค้นจากหลายนาทีเป็นวินาทีในคอลเลกชันหลายกิกะไบต์
- Compliance & reporting – กำหนดระยะเวลาการเก็บรักษา, ระดับความลับ, หรือธงตรวจสอบแบบไดนามิกที่สามารถสืบค้นเพื่อการตรวจสอบตามกฎระเบียบ
ข้อควรพิจารณาด้านประสิทธิภาพ
- Memory management – ตรวจสอบ heap ของ JVM และปรับ
-Xmx(เช่น-Xmx4gสำหรับดัชนีที่ใหญ่กว่า 2 GB) - Batch processing – รวมการเปลี่ยนแปลงแอตทริบิวต์ด้วย
AttributeChangeBatchเพื่อลดการเขียนดิสก์; แบ่งชุดที่ใหญ่กว่า 10 000 การแก้ไขเพื่อหลีกเลี่ยงการหมดเวลาธุรกรรม - Library updates – ใช้เวอร์ชันล่าสุดของ GroupDocs.Search; เวอร์ชัน 25.4 เพิ่มความเร็วการประเมินตัวกรองแอตทริบิวต์ 30 % เมื่อเทียบกับ 24.x
ปัญหาทั่วไปและวิธีแก้
| ปัญหา | สาเหตุ | วิธีแก้ |
|---|---|---|
| Attributes ไม่ถูกนำไปใช้ | ตัวจัดการเหตุการณ์ไม่ได้ลงทะเบียนก่อนทำดัชนี | ตรวจสอบให้แน่ใจว่า index.getEvents().FileIndexing.add(...) ทำงาน ก่อน คำเรียก index.add(...) ใด ๆ |
| Search ไม่คืนผลลัพธ์ | ชื่อแอตทริบิวต์ไม่ตรงกัน (แยกแยะตัวพิมพ์ใหญ่/เล็ก) | ใช้ชื่อแอตทริบิวต์ที่ตรงกันอย่างแม่นยำเมื่อสร้างตัวกรอง (createAttribute("main")) |
| Out‑of‑memory errors บนชุดข้อมูลขนาดใหญ่ | การเปลี่ยนแปลงมากเกินไปในชุดเดียว | แบ่งการอัปเดตขนาดใหญ่เป็น AttributeChangeBatch ย่อย (เช่น 5 000 เอกสารต่อชุด) |
| License ไม่ถูกจดจำ | ใช้ JAR ทดลองโดยไม่ได้ตั้งค่าไฟล์ไลเซนส์ | เรียก License license = new License(); license.setLicense("path/to/license.file"); ก่อนทำการดำเนินการใด ๆ กับดัชนี |
คำถามที่พบบ่อย
Q: ข้อกำหนดเบื้องต้นสำหรับการใช้ GroupDocs.Search ใน Java คืออะไร?
A: Java 8+, ไลบรารี GroupDocs.Search, และความรู้พื้นฐานเกี่ยวกับแนวคิดการทำดัชนี
Q: ฉันจะติดตั้ง GroupDocs.Search ผ่าน Maven อย่างไร?
A: เพิ่มรีโพซิทอรีและการพึ่งพาที่แสดงในส่วนการตั้งค่า Maven ไปยังไฟล์ pom.xml ของคุณ
Q: ฉันสามารถแก้ไขแอตทริบิวต์หลังจากเอกสารถูกทำดัชนีแล้วได้หรือไม่?
A: ได้, ใช้ AttributeChangeBatch เพื่ออัปเดตแอตทริบิวต์ของเอกสารเป็นชุดโดยไม่ต้องทำดัชนีใหม่
Q: ถ้ากระบวนการทำดัชนีของฉันช้า จะทำอย่างไร?
A: ปรับแต่งหน่วยความจำ JVM (-Xmx), ใช้การอัปเดตเป็นชุด, และอัปเกรดเป็นเวอร์ชันไลบรารีล่าสุดเพื่อรับแพตช์ประสิทธิภาพ
Q: ฉันจะหาแหล่งข้อมูลเพิ่มเติมเกี่ยวกับ GroupDocs.Search สำหรับ Java ได้จากที่ไหน?
A: เยี่ยมชม official documentation หรือสำรวจฟอรั่มชุมชน
แหล่งข้อมูล
- เอกสาร: GroupDocs.Search for Java Docs
- อ้างอิง API: API Reference
- ดาวน์โหลด: Latest Releases
- GitHub: GitHub GroupDocs.Search
- ฟอรั่มสนับสนุนฟรี: GroupDocs Forums
- ไลเซนส์ชั่วคราว: License Page
อัปเดตล่าสุด: 2026-09-21
ทดสอบกับ: GroupDocs.Search 25.4 for Java
ผู้เขียน: GroupDocs
<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>
import com.groupdocs.search.Index;
// Initialize an index in a specified directory
Index index = new Index("YOUR_OUTPUT_DIRECTORY/ChangeAttributes");
index.add("YOUR_DOCUMENT_DIRECTORY");
import com.groupdocs.search.results.DocumentInfo;
DocumentInfo[] documents = index.getIndexedDocuments();
import com.groupdocs.search.common.AttributeChangeBatch;
import com.groupdocs.search.SearchOptions;
AttributeChangeBatch batch = new AttributeChangeBatch();
batch.addToAll("public"); // Add 'public' to all documents
batch.remove(documents[0].getFilePath(), "public"); // Remove 'public' from a specific document
batch.add(documents[0].getFilePath(), "main", "key"); // Add 'main' and 'key' attributes
// Apply changes
index.changeAttributes(batch);
import com.groupdocs.search.results.SearchResult;
SearchOptions options = new SearchOptions();
options.setSearchDocumentFilter(SearchDocumentFilter.createAttribute("main"));
String query = "length";
SearchResult result = index.search(query, options); // Perform the search
import com.groupdocs.search.events.EventHandler;
import com.groupdocs.search.events.FileIndexingEventArgs;
index.getEvents().FileIndexing.add(new EventHandler<FileIndexingEventArgs>() {
@Override
public void invoke(Object sender, FileIndexingEventArgs args) {
if (args.getDocumentFullPath().endsWith("SampleDocument.pdf")) {
args.setAttributes(new String[] { "main", "key" });
}
}
});
index.add("YOUR_DOCUMENT_DIRECTORY");