突出显示搜索结果 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 类是表示磁盘上可搜索集合的核心组件。实例化后,所有索引和查询操作都通过该对象进行。

  1. Install the library – 使用上面的 Maven 代码段或从 GroupDocs 下载 JAR。
  2. Obtain a license – 首先使用试用许可证;在部署前用正式密钥替换。
  3. 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

相关教程