如何使用 GroupDocs.Search Java 搜尋文件

在現代企業應用程式中,快速且精確地 如何搜尋文件 是一項關鍵需求。無論您是處理合約、報告,或任何大型文件庫,GroupDocs.Search for Java 都提供了具備內建模糊匹配的強大全文搜尋引擎。本教學將逐步說明如何設定函式庫、建立索引、加入文件、設定 Java 模糊搜尋,以及取得結果——全部以清晰、對話式的說明呈現。

快速答案

  • 第一步是什麼? 透過 Maven 安裝 GroupDocs.Search Java 函式庫,或直接下載。
  • 如何建立索引? 實例化一個指向磁碟資料夾的 Index 物件;函式庫會自動建立可搜尋的結構。
  • 我可以使用錯別字搜尋嗎? 可以——啟用模糊搜尋以匹配拼寫錯誤或略有變化的詞彙。
  • 如何加入文件? 使用 Index 實例的 add 方法,傳入包含檔案的資料夾。
  • 需要哪個 Java 版本? 支援 JDK 8 或更高版本。

在 GroupDocs.Search 中,「如何搜尋文件」是什麼意思?

「如何搜尋文件」 指的是建立可搜尋索引並發出查詢以返回匹配檔案的過程,可選擇使用模糊邏輯容忍拼寫錯誤。GroupDocs.Search 在背後處理分詞、索引與排序,讓您專注於業務邏輯。

為什麼使用 GroupDocs.Search for Java?

GroupDocs.Search 支援 30+ 檔案格式(包括 DOCX、PDF、TXT、HTML 與 XLSX),且能在不將整個檔案載入記憶體的情況下索引 數百頁的文件,在一般伺服器硬體上提供次秒級的查詢回應。其模糊搜尋功能可在查詢包含錯別字時仍返回相關結果,提升使用者體驗。

前置條件

  • Java Development Kit (JDK): 版本 8 或更新。
  • IDE: IntelliJ IDEA、Eclipse,或任何相容 Java 的編輯器。
  • GroupDocs.Search for Java 函式庫: 透過 Maven(建議)加入或下載 JAR。

如何設定 GroupDocs.Search for Java?

首先,將 GroupDocs.Search 相依性加入您的建置檔案,確保儲存庫 URL 可存取,並驗證 JDK 版本符合最低需求。函式庫解析後,您即可在程式碼中匯入其類別,並在磁碟上建立索引資料夾以儲存所有可搜尋的資料。

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>

直接下載

另外,從官方發行頁面取得 JAR:

GroupDocs.Search for Java releases

GroupDocs.Search Documentation

如何建立索引?

建立一個永久的索引資料夾,GroupDocs.Search 會在其中儲存分詞後的資料。只需一行程式碼即可載入第一個索引——new Index("path/to/indexFolder")。Index 類別是核心元件,代表記憶體與磁碟上可搜尋的文件集合。

   import com.groupdocs.search.*;

   String indexFolder = "YOUR_OUTPUT_DIRECTORY/AdvancedUsage/Searching/SearchResults";
   Index index = new Index(indexFolder);

如何將文件加入索引?

使用 Index 實例的 add 方法指向包含來源檔案的資料夾。引擎會遞迴掃描支援的格式,提取文字內容,並更新內部結構。此單一呼叫即可有效處理大量批次,免除手動逐檔處理的需求。

   String documentFolder = "YOUR_DOCUMENT_DIRECTORY";
   index.add(documentFolder);

如何設定 Java 模糊搜尋?

FuzzySearchOptions 類別定義了編輯距離與前綴長度等參數,以控制搜尋對拼寫錯誤的容忍度。SearchOptions 物件彙總所有搜尋時的設定,包括模糊選項、結果上限與高亮偏好。透過在 SearchOptions 物件上設定 FuzzySearchOptions 來啟用模糊匹配。這告訴引擎在可設定的編輯距離內考慮詞彙,使搜尋容忍拼寫錯誤。

  String indexFolder = "YOUR_OUTPUT_DIRECTORY/AdvancedUsage/Searching/SearchResults";
  Index index = new Index(indexFolder);

如何執行搜尋操作?

在 Index 物件上呼叫 search 方法,提供查詢字串與已配置的 SearchOptions。引擎處理請求,若已啟用則套用模糊匹配,並根據相關性分數排序結果。即使在大型索引上,操作也能快速完成,因為搜尋是基於預先建好的分詞結構。此方法回傳一個 SearchResult 集合,內含匹配的文件、命中次數與高亮片段。

  String documentFolder = "YOUR_DOCUMENT_DIRECTORY";
  index.add(documentFolder);

如何處理與顯示搜尋結果?

SearchResult 是一個集合,保存個別的 SearchResultItem 物件,每個物件描述一個匹配的文件、命中次數與高亮片段。遍歷 SearchResult 項目並列印每個文件的路徑、出現次數與匹配片語。這個簡單的迴圈讓您能建立 UI 表格、日誌或 API 回應,清楚顯示文件匹配的原因。

  import com.groupdocs.search.options.*;

  SearchOptions options = new SearchOptions();
  options.getFuzzySearch().setEnabled(true);
  options.getFuzzySearch().setFuzzyAlgorithm(new TableDiscreteFunction(3));

實務應用

在實務情境中,如何搜尋文件 非常重要:

  1. 法律文件管理: 在數千份合約中於秒內定位條款或當事人。
  2. 學術研究: 即使搜尋詞拼寫錯誤,也能取得相關論文。
  3. 企業內容管理: 為內部入口網站提供快速、容錯的搜尋,涵蓋報告、電子郵件與簡報。

效能考量

  • 索引刷新: 每當來源檔案變更時重新執行 add 或 update,以保持結果最新。
  • 記憶體管理: GroupDocs.Search 以串流方式處理大型檔案,即使是 500 頁的 PDF 也能保持低記憶體佔用。
  • 分段索引: 將龐大的語料庫拆分為多個索引資料夾,以平行處理並提升查詢延遲。

常見問題

Q: 什麼是 Java 模糊搜尋,為何有用?
A: Java 模糊搜尋支援近似字串匹配,允許查詢即使有錯別字或不同拼寫仍返回結果,提升最終使用者體驗。

Q: 新增檔案後如何更新索引?
A: 再次呼叫 index.add("new/files/folder");函式庫會智慧地合併新內容,而不需重新建構整個索引。

Q: GroupDocs.Search 能處理受密碼保護的 PDF 嗎?
A: 可以——在加入檔案時於 DocumentLoadOptions 提供密碼,引擎會解密並索引內容。

Q: 索引的文件數量有上限嗎?
A: 函式庫可擴展至數百萬檔案;效能取決於硬體與儲存空間,並無硬性上限。

Q: 哪裡可以找到更進階的範例?
A: 請參閱官方文件,了解自訂分析器與結果排序等更深入的主題。

結論

您現在已了解如何使用 GroupDocs.Search for Java 進行 文件搜尋,從建立索引、啟用 Java 模糊搜尋,到處理結果。實作這些步驟,即可在任何基於 Java 的應用程式中提供快速、容錯的搜尋體驗。


最後更新: 2026-05-28
測試環境: GroupDocs.Search 23.10 for Java
作者: GroupDocs

  String query = "water OR \"Lorem ipsum\"";
  SearchResult result = index.search(query, options);
  for (int i = 0; i < result.getDocumentCount(); i++) {
      FoundDocument document = result.getFoundDocument(i);
      System.out.println("\tDocument: " + document.getDocumentInfo().getFilePath());
      System.out.println("\tOccurrences: " + document.getOccurrenceCount());

      for (FoundDocumentField field : document.getFoundFields()) {
          System.out.println("\t\tField: " + field.getFieldName());
          if (field.getTerms() != null) {
              for (int k = 0; k < field.getTerms().length; k++) {
                  System.out.println("\t\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
              }
          }
      }
  }

相關教學