从 PDF Java 中提取文本:使用 GroupDocs.Search 构建文档索引

在本实战指南中,您将了解 如何从 PDF Java 应用程序中提取文本,并将这些原始内容转换为快速的全文可搜索索引。无论您是构建内部知识库、合同搜索门户,还是自定义搜索引擎,以下步骤将带您完成全部过程——从从 PDF 中提取文本、序列化数据、创建索引,到最终执行查询。让我们深入了解为何 GroupDocs.Search 能让整个流程顺畅且可扩展。

快速答案

  • 主要目的是什么? 从 PDF Java 文件中提取文本,并使用 GroupDocs.Search 创建可搜索的文档索引。
  • 使用哪个库版本? GroupDocs.Search 25.4(或最新发布版本)。
  • 是否需要许可证? 免费试用可用于开发;生产环境需要完整许可证。
  • 可以索引 PDF 吗? 可以——提取 PDF 文本并将其添加到索引中。
  • 如何执行搜索? 在添加数据后使用 index.search(query) 方法。

什么是文档索引?

文档索引是从文件中提取的可搜索词汇的结构化集合。通过创建文档索引,您可以在大型仓库中实现快速的全文搜索,显著提升检索速度和准确性。

为什么在 Java 中使用 GroupDocs.Search?

  • 强大的提取能力 – 支持 PDF、Word、Excel 等多种格式。
  • 简易序列化 – 将提取的数据存储为字节数组,以便后续重用。
  • 可扩展的索引 – 高效索引数百万文档。
  • 强大的查询语言 – 支持复杂的全文搜索 Java 查询。

前置条件

  • GroupDocs.Search for Java(版本 25.4 或更高)。
  • Java Development Kit (JDK),需与您的 GroupDocs 版本兼容。
  • 如 IntelliJ IDEA 或 Eclipse 等 IDE。
  • 用于依赖管理的 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>

直接下载
或者,从 GroupDocs.Search for Java releases 下载最新版本。

获取许可证

  • 免费试用 – 使用临时许可证测试所有功能。
  • 购买 – 获得完整访问权限和优先支持。

步骤实现

如何从 PDF(及其他文档)中提取文本

提取原始或格式化文本是创建文档索引的第一步。当您 从 PDF Java 中提取文本 时,向搜索引擎提供了可理解的内容。

String documentPath = "YOUR_DOCUMENT_DIRECTORY/Lorem ipsum.pdf";
Extractor extractor = new Extractor();
Document document = Document.createFromFile(documentPath);
ExtractionOptions extractionOptions = new ExtractionOptions();
extractionOptions.setUseRawTextExtraction(false); // Extract with formatting
ExtractedData extractedData = extractor.extract(document, extractionOptions);

提示: 如果需要无格式的纯文本,请设置 setUseRawTextExtraction(true)

如何序列化提取的数据

序列化可以让您将提取的数据存储,以便后续索引使用。

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
extractedData.serialize(outputStream);
byte[] serializedArray = outputStream.toByteArray();

如何反序列化提取的数据

当您准备构建索引时,将字节数组转换回对象。

ByteArrayInputStream inputStream = new ByteArrayInputStream(serializedArray);
ExtractedData deserializedData = ExtractedData.deserialize(inputStream);

如何创建文档索引

现在您已有 deserializedData,可以创建用于存放可搜索词汇的索引。

String indexFolder = "YOUR_OUTPUT_DIRECTORY/AdvancedUsage/Indexing/SeparateDataExtraction";
com.groupdocs.search.Index index = new com.groupdocs.search.Index(indexFolder);

如何向索引添加数据并执行搜索

向索引添加数据并查询索引,完成 从 PDF Java 中提取文本 的工作流。

ExtractedData[] dataToIndex = new ExtractedData[] { deserializedData };
index.add(dataToIndex, new IndexingOptions());
String query = "ipsum";
SearchResult result = index.search(query);

专业提示: 使用 index.search("your query", SearchOptions) 可微调相关性排序。

常见使用场景

  1. 文档管理系统 – 快速定位合同、发票或政策文件。
  2. 基于内容的搜索引擎 – 使用全文搜索 Java 能力为内部知识库提供动力。
  3. 数据归档解决方案 – 索引历史记录,实现即时检索。

性能考虑因素

  • 内存管理: 为大批量文档调整 JVM 堆大小。
  • 索引选项: 禁用不必要的功能(如词项向量),以加快索引速度。
  • 定期更新: 保持 GroupDocs.Search 为最新,以获得性能补丁。

常见问题解答

Q: 如何高效处理非常大的 PDF 文件?
A: 使用 Extractor 对文件进行流式处理并分块处理;必要时增加 JVM 堆大小。

Q: 我可以自定义搜索查询语法吗?
A: 可以——GroupDocs.Search 支持布尔运算符、通配符和邻近搜索。

Q: 如果序列化失败,我该怎么办?
A: 确认所有对象实现了 Serializable,并捕获 IOException 记录详细信息。

Q: 能否仅索引文档的特定章节?
A: 完全可以——在索引前通过配置 ExtractionOptions 过滤页面或章节。

Q: 如何升级到更高版本的 GroupDocs.Search?
A: 在 pom.xml 中更新版本号并运行 mvn clean install;查看迁移指南以了解破坏性更改。

资源


最后更新: 2026-02-19
测试环境: GroupDocs.Search 25.4 for Java
作者: GroupDocs