全文搜索是一種在文檔集合中搜索文本/查詢的方法。這種方法可以快速找到術語/短語的所有實例,並且它通過使用文本索引來工作。在本文中,我們將學習如何使用 Java 以編程方式搜索文檔中的全文。
在此之後,您可以實施各種搜索技術並為文字處理文檔、電子表格、演示文稿、HTML 文件、PDF 文件、電子書、電子郵件、ZIP 存檔和許多其他 文檔格式 構建您的搜索解決方案。
以下主題涵蓋如下:
用於全文搜索的 Java API
GroupDocs.Search 提供了一個全文搜索 Java API,它可以集成到任何應用程序中,而無需任何第三方工具和軟件依賴。它允許您搜索大量文檔格式。可以使用 API 執行的一些搜索技術如下:
- 區分大小寫搜索
- 正則表達式搜索
- 分面搜索
- 模糊搜索
- 同音字查詢
- 同義詞搜索
下載或配置
您可以從 下載部分 下載 JAR 文件,或者只獲取基於 maven 的 Java 應用程序的 pom.xml 的最新存儲庫和依賴項配置。
<repository>
<id>GroupDocsJavaAPI</id>
<name>GroupDocs Java API</name>
<url>http://repository.groupdocs.com/repo/</url>
</repository>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-search</artifactId>
<version>21.3</version>
</dependency>
使用 Java 進行全文搜索
在存儲在文件夾中的文件中執行搜索有兩個步驟。
- 索引
- 執行搜索
使用 Java 索引文件
一個索引擁有所有文檔的掃描文本。因此,當您要執行搜索操作時,只會引用索引,而不是原始文檔的文本。為了能夠即時搜索具有相同或不同文件格式的數千個文檔,您需要創建一個索引並將這些文檔添加到其中。當文檔被索引時,索引就可以處理搜索查詢了。
以下簡單的兩行創建一個索引,並將文檔文件夾添加到索引中。
Index index = new Index("indexingFolderPath");
index.add("documentsFolderPath");
在 Java 中執行搜索
在為相同或不同格式(如 Word、PDF、Excel 和 HTML)的多個文檔建立索引後,我們可以繼續處理對它們的特定搜索查詢(搜索詞“Draw”)。以下是如何使用 Java 對文件夾內的多個文檔執行文本搜索的步驟:
- 指定文檔和索引文件夾的源文件夾。
- 使用索引文件夾創建 Index。
- 將源文件夾添加到索引中。
- 準備查詢字符串。
- 使用 Index 類的 search 方法執行搜索。
- 遍歷每個文檔的屬性的每個搜索結果。
以下源代碼在 Java 中對提供的文件夾中的所有文檔執行文本搜索。
// 使用 Java 在一個文件夾中搜索多個 PDF、Word、Excel、HTML 文檔中的指定文本
Index index = new Index("path/indexingFolder");
index.add("path/documentsFolderPath");
// 在索引中搜索指定文本
SearchResult result = index.search("Draw");
for (int i = 0; i < result.getDocumentCount(); i++) {
FoundDocument document = result.getFoundDocument(i);
System.out.println("Document Path: " + document.getDocumentInfo().getFilePath());
System.out.println("Occurrence : " + document.getOccurrenceCount());
}
我們將獲取文檔路徑和搜索詞在該指定文件夾的所有文檔中出現的次數。這是可視化的屏幕截圖。
在 Java 中突出顯示文本搜索結果
現在讓我們執行相同的全文搜索並突出顯示與您的查詢匹配的所有事件。
以下步驟顯示瞭如何突出顯示文本搜索結果:
- 創建 Index 並將文檔文件夾添加到索引中。
- 準備查詢字符串。
- 使用 search 方法搜索文檔文件夾。
- 在遍歷結果時,使用 HtmlHighlighter 創建熒光筆。
- 使用高亮方法高亮顯示搜索結果。
以下代碼使用 Java 生成帶有突出顯示搜索結果的 HTML 輸出。
// Java 高亮顯示一個文件夾中多個文檔的全文搜索結果
Index index = new Index("path/indexingFolder");
index.add("path/documentsFolderPath"); // Synchronous indexing documents from the specified folder
String query = "draw"; // Specify a search query
SearchResult result = index.search(query); // Searching in the index
for (int i = 0; i < result.getDocumentCount(); i++)
{
FoundDocument document = result.getFoundDocument(i);
String path = "path/Highlighted-"+ i +".html";
OutputAdapter outputAdapter = new FileOutputAdapter(path);
HtmlHighlighter highlighter = new HtmlHighlighter(outputAdapter); // Creating the highlighter
index.highlight(document, highlighter); // Generates HTML formatted output document with highlighted search results
}
作為輸出,我們將獲得多個 HTML 文件。每個文件將顯示單獨文檔(例如 excel.xlsx、source.docx、target.docx)的內容,並突出顯示搜索詞/詞。下面給出了使用上述代碼獲得的 DOCX 文件、TXT 文件和 PDF 文件的突出顯示 HTML 輸出。
獲取免費的 API 許可證
您可以獲得免費的臨時許可證,以便在不受評估限制的情況下使用 API。
結論
在本文中,我們學習了在 Java 中搜索一個文件夾的多個文檔中的文本。此外,我們還討論瞭如何使用 GroupDocs.Search for Java 以編程方式突出顯示 MS Word 文件、TXT 文件和 PDF 文件的 HTML 格式搜索結果文本。
您可以使用 文檔 了解有關 API 的更多信息。 GitHub 中提供了更多示例。如有疑問,請通過論壇 聯繫我們。