如何索引 Java – 使用 GroupDocs 的快速文件搜尋
如果您想了解 如何索引 java 檔案的有效方法,您來對地方了。在當今資料驅動的世界中,快速定位正確的文件可以節省大量手動工作時間。GroupDocs.Search for Java 為您提供了一種直接的方式,將資料夾中的檔案轉換為可搜尋的索引,讓您只需幾行程式碼即可將文件加入索引、從索引中刪除文件,並從檔案系統載入文件。本教學將帶您完成設定、索引、搜尋與清理的步驟,讓您能將快速文件搜尋整合到任何 Java 應用程式中。
快速答案
- 主要目的為何? 高效索引與搜尋 Java 文件。
- 需要哪個函式庫? GroupDocs.Search for Java (v25.4+)。
- 需要授權嗎? 可使用免費試用或臨時授權;正式環境需購買永久授權。
- 可以從索引中刪除文件嗎? 可以,使用帶有文件鍵的
delete方法。 - Apache Commons IO 必須嗎? 建議使用以便處理檔案工具。
什麼是「如何索引 Java」?
索引 Java 文件是指建立可搜尋的資料結構(索引),將文件內容映射到可搜尋的詞彙,讓系統能根據關鍵字查詢快速取得相關檔案。一次建立索引後,即使面對數千個檔案,後續搜尋也能在毫秒內完成,顯著提升開發人員的生產力與最終使用者的體驗。
為何使用 GroupDocs.Search for Java?
GroupDocs.Search 支援 50 多種輸入與輸出格式——包括 PDF、DOCX、XLSX、PPTX、HTML 以及常見影像類型,且能在不將整個檔案載入記憶體的情況下處理上百頁的文件。其最佳化演算法可在資料集高達 100 萬文件時於 100 毫秒以下回應查詢,成為企業級搜尋解決方案的可擴充選擇。
前置條件
在開始之前,請確保您已具備:
- GroupDocs.Search for Java(版本 25.4 或更新)。
- Apache Commons IO,提供便利的檔案工具。
- JDK 8 或以上,並使用如 IntelliJ IDEA 或 Eclipse 等 IDE。
- 基本的 Java 知識,若熟悉 Maven 更佳。
設定 GroupDocs.Search for Java
Maven 設定
將儲存庫與相依性加入您的 pom.xml:
<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>
小技巧: 請將版本號與最新發行版保持同步,以獲得效能提升。
直接下載(若不想使用 Maven)
您也可以從官方網站下載最新的 JAR: GroupDocs.Search for Java releases.
取得授權
- 免費試用: 在未提供授權金鑰的情況下測試函式庫。
- 臨時授權: 申請以延長評估期間。
- 正式授權: 正式環境部署時必須使用。
基本初始化
建立一個簡單的 Java 類別,以驗證函式庫能正確載入:
import com.groupdocs.search.*;
public class DocumentIndexing {
public static void main(String[] args) {
Index index = new Index("YOUR_DOCUMENT_DIRECTORY\\output\\AdvancedUsage\\Indexing\\DeleteIndexedDocuments");
System.out.println("GroupDocs.Search initialized successfully.");
}
}
執行此程式應會印出確認訊息,表示索引資料夾已就緒。
如何將文件加入索引
Document 類別代表可搜尋的實體,保存檔案的二進位內容與中繼資料。若要加入文件,建立一個包裹檔案位元組且分配唯一鍵的 Document 實例,然後呼叫 index.add(document)。函式庫會自動擷取文字、分詞,並將倒排資訊儲存至索引資料夾。此操作的執行時間與檔案大小呈線性關係,且支援大型檔案的延遲載入。
Direct answer:
Index index = new Index("YOUR_DOCUMENT_DIRECTORY\\output\\AdvancedUsage\\Indexing\\DeleteIndexedDocuments", true);
- 第一個參數是儲存索引檔案的資料夾。
- 第二個參數 (
true) 告訴 GroupDocs 若資料夾不存在則建立,並自動更新已存在的索引。
String filePath = "YOUR_DOCUMENT_DIRECTORY\\English.docx";
DocumentLoader documentLoader = new DocumentLoader(filePath);
Document document = Document.createLazy(DocumentSourceKind.Stream, documentLoader.getDocumentKey(), documentLoader);
Document[] documents = new Document[]{document};
index.add(documents, new IndexingOptions());
DocumentLoader(稍後定義)讀取檔案並提供唯一鍵。createLazy確保大型檔案有效處理,僅在需要時載入內容。
如何從檔案系統載入文件
DocumentLoader 工具類別從磁碟讀取檔案,並建立具有穩定識別碼的相對應 Document 物件。載入檔案時,loader 會讀取檔案位元組,產生唯一鍵(例如路徑的雜湊),並建構 Document 實例。之後即可將此物件傳遞給 index.add(document)。使用專屬的 loader 可將檔案系統的處理抽離,使索引程式碼可重複使用,且在不同儲存後端測試更方便。
Direct answer:
class DocumentLoader {
private final String filePath;
private final String documentKey;
public DocumentLoader(String filePath) {
this.filePath = filePath;
documentKey = FilenameUtils.getName(filePath);
}
public String getDocumentKey() { return documentKey; }
public Document loadDocument() throws IOException {
Path path = Paths.get(filePath);
byte[] buffer = Files.readAllBytes(path);
ByteArrayInputStream stream = new ByteArrayInputStream(buffer);
return Document.createFromStream(documentKey, new Date(System.currentTimeMillis()), "." + FilenameUtils.getExtension(filePath), stream);
}
}
如何在索引中執行關鍵字搜尋
SearchQuery 類別封裝使用者的查詢字串,而 SearchResult 保存匹配的文件 ID、摘要與相關性分數。使用欲搜尋的關鍵字建立 SearchQuery,並可選擇設定模糊匹配或過濾條件,接著呼叫 index.search(query)。此方法會回傳 SearchResult 物件,內含每筆匹配文件的識別碼、突顯的片段以及相關性分數。您可以遍歷這些結果以顯示摘要或進一步處理。
Direct answer:
String query = "moment";
SearchResult searchResult1 = index.search(query);
- 將任意文字字串傳入
search,即可取得包含匹配文件 ID、摘要與相關性分數的SearchResult。
如何從索引中刪除文件
UpdateOptions 類別讓您控制刪除等變更如何套用至索引。將唯一的文件鍵傳入 index.delete(keys),函式庫會移除與這些鍵相關的所有倒排資訊。您可傳入 UpdateOptions 實例,以指定刪除是立即執行或批次處理以提升效能。刪除後,索引仍保持一致性,無需完整重建。
Direct answer:
String[] documentKeys = new String[]{documentLoader.getDocumentKey()};
DeleteResult deleteResult = index.delete(new UpdateOptions(), documentKeys);
- 提供欲移除文件的鍵。
UpdateOptions可控制刪除的套用方式(例如即時或批次)。
刪除後如何取得索引文件
getDocumentList() 方法回傳目前索引中所有文件識別碼的集合。呼叫 index.getDocumentList() 可取得當前的文件鍵集合,反映至今所有的新增與刪除。此清單可用於驗證不需要的項目已成功移除,或遍歷剩餘文件以進一步處理。這是一個輕量操作,不會修改索引。
Direct answer:
DocumentInfo[] indexedDocuments2 = index.getIndexedDocuments();
- 此呼叫會回傳索引中仍存在的文件清單,協助您驗證刪除是否成功。
Java 搜尋效能技巧
優化 java 搜尋效能 需執行三項關鍵動作:(1) 在大量新增或刪除後執行 index.optimize() 以壓縮倒排檔案;(2) 為超過 10 MB 的檔案啟用延遲載入,以避免 OutOfMemory 錯誤;(3) 為 JVM 配置足夠的堆記憶體(例如中等規模工作負載使用 -Xmx2g)。遵循這些做法可確保即使索引成長,查詢延遲仍維持在 100 毫秒以下。
實務應用
- 企業文件入口網站 – 員工可在數秒內找到政策、合約或手冊。
- 法律案件管理 – 律師能快速在數千份 PDF 與 Word 檔中找到先例條款。
- 數位圖書館 – 大學提供研究論文與學位論文的全文搜尋。
常見問題與解決方案
| Issue | Cause | Solution |
|---|---|---|
| 未返回結果 | 查詢詞未被索引或被停用詞過濾 | 檢查 IndexingOptions 並調整停用詞清單 |
| 記憶體不足錯誤 | 大型檔案被即時載入 | 改用 Document.createLazy 或增加 JVM 堆記憶體 |
| 已刪除的文件仍顯示 | 刪除後索引未刷新 | 呼叫 index.optimize() 或重新開啟索引實例 |
常見問答
Q: 我可以同時索引 PDF、DOCX 與 PPTX 嗎?
A: 可以,GroupDocs.Search 內建支援多種格式,超過 50 種檔案類型,無需額外轉換器。
Q: 「從索引中刪除文件」的底層運作原理是什麼?
A: delete 方法會移除指定文件鍵的倒排資訊,並更新內部結構,使索引在不完整重建的情況下保持一致。
Q: 有方法監控索引大小嗎?
A: 使用 index.getStatistics() 可取得文件數量、總大小及其他有用指標。
Q: 每次刪除後需要重新建構整個索引嗎?
A: 不需要。刪除是增量的,僅移除受影響的條目,您可定期呼叫 index.optimize() 以維持最佳效能。
Q: 若需要在結構變更後重新索引所有檔案,該怎麼做?
A: 建立指向不同資料夾的新 Index 實例,重新加入所有文件,然後切換應用程式使用新的索引路徑。
結論
現在您已掌握使用 GroupDocs.Search for Java 如何索引 Java 文件的完整流程——從環境設定、將文件加入索引、從檔案系統載入、執行搜尋,到刪除與驗證索引內容。將這些步驟整合至您的應用程式,可大幅提升文件可發現性、降低搜尋延遲,並提升整體生產力。
後續步驟:
- 嘗試複雜查詢(萬用字元、模糊匹配)。
- 探索進階功能,如分面搜尋、自訂分析器與中繼資料索引。
祝索引愉快!
最後更新: 2026-08-05
測試環境: GroupDocs.Search Java 25.4
作者: GroupDocs