如何索引 Java – 使用 GroupDocs 進行快速文件搜尋

如果你在思考 how to index java 檔案的高效方法,恭喜你來對地方了。在如今資料驅動的世界,快速定位正確的文件可以節省大量手動工作時間。GroupDocs.Search for Java 提供了一個簡單的方式,將資料夾中的檔案轉換為可搜尋的索引,讓你只需幾行程式碼即可將文件加入索引、從索引中刪除文件,並從檔案系統載入文件。

以下是一個逐步說明,從必要的設定開始,接著建立與填充索引,示範如何執行關鍵字搜尋,最後說明刪除等清理操作。讓我們一起深入了解吧!

快速答覆

  • 主要目的為何? 高效地索引與搜尋 Java 文件。
  • 需要哪個函式庫? GroupDocs.Search for Java(v25.4 以上)。
  • 需要授權嗎? 提供免費試用或暫時授權;正式環境需購買永久授權。
  • 可以從索引中刪除文件嗎? 可以,使用 delete 方法搭配文件鍵即可。
  • Apache Commons IO 必須嗎? 建議使用,以便取得便利的檔案處理工具。

什麼是 “how to index java”?

索引 Java 文件即是建立一個可搜尋的資料結構(索引),將文件內容對映到可搜尋的詞彙,從而能夠根據關鍵字查詢快速取得相關檔案。

為什麼使用 GroupDocs.Search for Java?

  • 速度: 經過最佳化的演算法即使在大型集合上也能提供快速的查詢結果。
  • 可擴充性: 能處理數千份文件而不影響效能。
  • 彈性: 支援多種檔案格式,並提供大型檔案的延遲載入(lazy loading)。
  • 易於整合: 簡單的 Maven 設定與直觀的 API。

前置條件

在開始之前,請確保你已具備:

  • 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.");
    }
}

執行此程式後應會印出確認訊息,表示索引資料夾已就緒。

如何將文件加入索引

步驟 1:建立索引資料夾

Index index = new Index("YOUR_DOCUMENT_DIRECTORY\\output\\AdvancedUsage\\Indexing\\DeleteIndexedDocuments", true);
  • 第一個參數是用來存放索引檔案的資料夾路徑。
  • 第二個參數 (true) 代表若資料夾不存在則自動建立,且會自動更新已存在的索引。

步驟 2:從串流載入文件並加入

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 可確保大型檔案在需要時才載入內容,提升效能。

如何從檔案系統載入文件

以下是一個可重複使用的載入器,能從磁碟讀取任意檔案、擷取位元組,並建立可供索引的 Document 物件。

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);
    }
}

為什麼這很重要: 使用專屬的載入器可將檔案系統的處理與索引邏輯分離,使程式碼更清晰、也更易於測試。

如何在索引中執行關鍵字搜尋

String query = "moment";
SearchResult searchResult1 = index.search(query);
  • 將任意文字字串傳入 search,即可取得包含匹配文件 ID、摘要與相關性分數的 SearchResult

如何從索引中刪除文件

String[] documentKeys = new String[]{documentLoader.getDocumentKey()};
DeleteResult deleteResult = index.delete(new UpdateOptions(), documentKeys);
  • 提供欲刪除文件的鍵值。
  • UpdateOptions 讓你控制刪除的方式(例如即時或批次)。

如何在刪除後取得剩餘的索引文件

DocumentInfo[] indexedDocuments2 = index.getIndexedDocuments();
  • 此呼叫會回傳目前仍存在於索引中的文件清單,協助你驗證刪除是否成功。

實務應用

GroupDocs.Search for Java 在以下情境中表現優異:

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

效能考量

  • 定期優化 索引(index.optimize())於大量更新後執行,以維持查詢速度。
  • 使用延遲載入 處理巨型檔案,避免 OutOfMemory 錯誤。
  • 調整 JVM 記憶體 配置,依文件大小分佈設定,例如中等規模工作負載常使用 -Xmx2g

常見問題與解決方案

問題原因解決方案
沒有返回結果查詢詞未被索引或被停用詞過濾檢查 IndexingOptions 並調整停用詞清單
記憶體不足錯誤大檔案被即時載入改用 Document.createLazy 或增加 JVM 堆積
已刪除的文件仍出現刪除後未重新整理索引呼叫 index.optimize() 或重新開啟索引實例

常見問答

Q: 可以同時索引 PDF、DOCX 與 PPTX 嗎?
A: 可以,GroupDocs.Search 內建支援多種格式。

Q: “從索引中刪除文件” 的底層原理是什麼?
A: delete 方法會移除指定文件鍵值的倒排列表,並更新內部結構,使索引在不重新建構的情況下保持一致。

Q: 有辦法監控索引大小嗎?
A: 使用 index.getStatistics() 可取得文件數量、總大小等指標。

Q: 每次刪除後都需要重新建構整個索引嗎?
A: 不需要。刪除是增量的,只會移除受影響的條目。

Q: 若資料結構變更,需要重新索引所有檔案嗎?
A: 建議建立指向不同資料夾的新 Index 實例,然後重新加入所有文件。

結論

現在你已掌握 how to index java 文件的完整流程——從環境設定、將文件加入索引、從檔案系統載入、執行搜尋,到刪除與驗證索引內容。將這些步驟整合到你的應用程式中,將大幅提升文件可發現性與整體生產力。

後續建議:

  • 嘗試更複雜的查詢(通配符、模糊匹配)。
  • 探索進階功能,如分面搜尋、自訂分析器與中繼資料索引。

祝你索引順利!


最後更新: 2026-03-01
測試環境: GroupDocs.Search Java 25.4
作者: GroupDocs