从 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)可微调相关性排序。
常见使用场景
- 文档管理系统 – 快速定位合同、发票或政策文件。
- 基于内容的搜索引擎 – 使用全文搜索 Java 能力为内部知识库提供动力。
- 数据归档解决方案 – 索引历史记录,实现即时检索。
性能考虑因素
- 内存管理: 为大批量文档调整 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;查看迁移指南以了解破坏性更改。
资源
- 文档: GroupDocs Documentation
- API 参考: GroupDocs API Reference
- 下载: GroupDocs Downloads
- GitHub: GroupDocs GitHub Repository
- 免费支持: GroupDocs Forum
- 临时许可证: Obtain a Temporary License
最后更新: 2026-02-19
测试环境: GroupDocs.Search 25.4 for Java
作者: GroupDocs