如何索引 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 毫秒以下。

實務應用

  1. 企業文件入口網站 – 員工可在數秒內找到政策、合約或手冊。
  2. 法律案件管理 – 律師能快速在數千份 PDF 與 Word 檔中找到先例條款。
  3. 數位圖書館 – 大學提供研究論文與學位論文的全文搜尋。

常見問題與解決方案

IssueCauseSolution
未返回結果查詢詞未被索引或被停用詞過濾檢查 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

相關教學