突出显示搜索结果 Java – 同步和异步索引
在本指南中,您将了解如何使用 GroupDocs.Search 库 highlight search results Java,并一步步了解如何同步和异步地对 Java 文档进行索引。无论您是构建小型桌面工具还是大规模企业搜索服务,这些技术都能让您在不阻塞应用线程的情况下提供即时、视觉清晰的匹配结果。
快速答案
- What does “highlight search results Java” mean? 它指的是在返回的片段中用标记(例如
<mark>)包装每个匹配的词,以便用户能够立即看到命中的上下文。 - When should I use synchronous indexing? 当您需要在文档添加后立即可搜索时,适用于小到中等规模的集合。
- When is asynchronous indexing preferable? 当处理大批量数据或需要在后台构建索引时保持 UI 线程响应,适合使用异步索引。
- Do I need a license? 免费试用可用于开发;完整许可证可解除限制并解锁高级功能。
- Which Java version is supported? 支持 Java 8 或更高版本。
什么是 “highlight search results Java”?
highlight search results java 是从 GroupDocs.Search 获取原始匹配数据并插入可视提示——通常是 HTML <mark> 标签——围绕每个找到的词的过程。这使得结果片段在网页或 Swing 组件中即时可读,通过显示查询出现的位置来提升用户体验。
为什么要为 Java 使用 GroupDocs.Search?
GroupDocs.Search 提供高性能、语言无关的引擎,能够 每秒处理多达 5 000 个文档,支持 30 多种文件格式,以及 索引 1 千万文档的集合,且无需将整个语料库加载到内存中。其内置的高亮、实时索引和多语言分析器使其非常适合内容管理系统、电子商务目录和企业文档库。
前置条件
- Java Development Kit (JDK 8 或更高) 已安装且
JAVA_HOME正确设置。 - 如 IntelliJ IDEA 或 Eclipse 等 IDE。
- 包含待索引文件的文件夹(例如
documents/)——纯文本、PDF、DOCX 等。 - 用于依赖管理的 Maven(或手动添加 JAR)。
必需的库和依赖
将 GroupDocs.Search 添加到您的 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>
如需直接下载,请从 GroupDocs.Search for Java releases 获取最新版本。
环境设置
- 验证
JAVA_HOME指向兼容的 JDK。 - 创建一个新的 Maven 项目,并将上述代码片段粘贴到
<dependencies>部分。 - 将示例文件放置在类似
src/main/resources/documents/的目录中。
如何为 Java 设置 GroupDocs.Search
Index 是表示存储在磁盘上的可搜索集合的核心类。
创建指向磁盘文件夹的 Index 实例,如果有许可证则应用许可证,并可选地配置语言特定分词的分析器。此准备步骤确保引擎能够高效、正确地读取、写入和搜索索引。
Index 类是表示磁盘上可搜索集合的核心组件。实例化后,所有索引和查询操作都通过该对象进行。
- Install the library – 使用上面的 Maven 代码段或从 GroupDocs 下载 JAR。
- Obtain a license – 首先使用试用许可证;在部署前用正式密钥替换。
- Initialize the index – 以下代码片段展示了如何创建(或打开)索引文件夹:
import com.groupdocs.search.Index;
// Create an index in the specified folder
Index index = new Index("path/to/index/folder");
如何在同步索引中突出显示搜索结果 Java
DocumentHighlighter 是一个从搜索结果生成高亮片段的实用类。
加载索引,使用 index.add(documentPath) 添加文档,执行查询,然后调用 DocumentHighlighter 将匹配项包装在 <mark> 标签中。整个过程在调用线程中运行,因此文档在 add 返回后即可立即可搜索供最终用户使用。
步骤 1:创建索引并附加错误处理
import com.groupdocs.search.*;
import com.groupdocs.search.events.*;
import java.nio.file.Paths;
public class SynchronousIndexingFeature {
public static void main(String[] args) {
String indexFolder = "YOUR_DOCUMENT_DIRECTORY/SynchronousIndexing";
String documentsFolder = YOUR_DOCUMENT_DIRECTORY; // Replace with actual directory path
Index index = new Index(indexFolder);
// Handle errors
index.getEvents().ErrorOccurred.add(new EventHandler<IndexErrorEventArgs>() {
@Override
public void invoke(Object sender, IndexErrorEventArgs args) {
System.out.println(args.getMessage());
}
});
步骤 2:添加文档并运行搜索
// Add documents
index.add(documentsFolder);
// Perform a search
String query = "tincidunt";
SearchResult result = index.search(query);
步骤 3:处理结果并突出显示搜索结果 Java
for (int i = 0; i < result.getDocumentCount(); i++) {
FoundDocument document = result.getFoundDocument(i);
System.out.println(": Document: " + document.getDocumentInfo().getFilePath());
System.out.println(": Occurrences: " + document.getOccurrenceCount());
}
// Highlight results
if (result.getDocumentCount() > 0) {
FoundDocument document = result.getFoundDocument(0);
String path = YOUR_OUTPUT_DIRECTORY + "/Highlighted.html";
OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, path);
DocumentHighlighter highlighter = new DocumentHighlighter(outputAdapter);
index.highlight(document, highlighter);
}
}
}
如何在异步索引中突出显示搜索结果 Java
IndexingOptions 用于配置索引过程的运行方式,包括同步或异步模式。
将 IndexingOptions 配置为后台模式,订阅 StatusChanged 事件,让引擎在 UI 继续处理其他请求的同时进行文件索引。一旦状态变为 Ready,即可执行搜索并获取高亮片段,效果与同步模式相同。
AsyncIndexingListener 接收进度更新,允许您显示进度条或记录状态而不阻塞主线程。
步骤 1:设置带有事件监听器的索引
import com.groupdocs.search.*;
import com.groupdocs.search.events.*;
public class AsynchronousIndexingFeature {
public static void main(String[] args) {
String indexFolder = "YOUR_DOCUMENT_DIRECTORY/AsynchronousIndexing";
String documentsFolder = YOUR_DOCUMENT_DIRECTORY; // Replace with actual directory path
Index index = new Index(indexFolder);
// Handle errors and status changes
index.getEvents().ErrorOccurred.add(new EventHandler<IndexErrorEventArgs>() {
@Override
public void invoke(Object sender, IndexErrorEventArgs args) {
System.out.println(args.getMessage());
}
});
index.getEvents().StatusChanged.add(new EventHandler<BaseIndexEventArgs>() {
@Override
public void invoke(Object sender, BaseIndexEventArgs args) {
if (args.getStatus() != IndexStatus.Ready || args.getStatus() == IndexStatus.Failed) {
System.out.println("Indexing completed.");
}
}
});
步骤 2:启用异步模式并开始索引
// Set up async indexing options
IndexingOptions options = new IndexingOptions();
options.setAsync(true);
// Add documents asynchronously
index.add(documentsFolder, options);
}
}
如何在 Java 中索引文档 – 实用技巧
index.update(path) 使用指定路径的文件更新索引中已有的文档。
将大型集合拆分为 1 000–5 000 文件的批次,按扩展名过滤以避免不必要的解析,并对已更改的文件使用 index.update(path) 而不是重新构建整个索引。这些做法可保持内存使用低并使索引时间可预测,从而维持一致性。
- Batch size: 对于超大集合,将文件夹拆分为更小的批次以避免内存峰值。
- File filters: 使用
IndexingOptions.setFileExtensions仅包含所需的格式(例如.pdf、.docx)。 - Re‑indexing: 当文档发生更改时,调用
index.update(documentPath)而不是从头重新创建索引。
性能考虑
- Memory: 监控堆使用情况;如果同时处理许多大文件,请增加
-Xmx。 - CPU: 异步索引将工作负载分布到多个线程,但仍会消耗 CPU——使用 JVisualVM 进行监控。
- Result highlighting: 高亮会带来适度的开销(约每个结果 2–5 ms)。如果需要重复显示相同片段,请缓存生成的 HTML。
常见问题
Q: 我可以在同一个应用程序中同时使用同步和异步索引吗?
A: 可以。对小型、频繁更新的集合使用同步索引,对批量导入或后台任务使用异步索引。
Q: 我如何自定义高亮样式?
A: 提供自定义的 DocumentHighlighter 实现,在匹配的词周围写入所需的 HTML、CSS 或 XML 标签。
Q: GroupDocs.Search 开箱即支持哪些文件类型?
A: 文本、PDF、DOC/DOCX、XLS/XLSX、PPT/PPTX、HTML 等,此外通过内置解析器支持超过 30 种格式。
Q: 能否同时搜索多种语言?
A: 完全可以。GroupDocs.Search 包含多语言分析器,只需在创建索引时配置相应的 Analyzer。
Q: 我该如何保护索引文件夹?
A: 将索引存放在受保护的目录中,设置严格的文件系统权限,并可选地使用库的安全功能对索引进行加密。
最后更新: 2026-09-11
测试环境: GroupDocs.Search 25.4 for Java
作者: GroupDocs