提取 PDF 文本 Java – 使用 GroupDocs.Search 构建索引

在本实践指南中,您将了解 how to extract pdf text java 从 PDF 文件中提取文本、序列化提取的内容,并创建高性能的可搜索索引。无论您是构建内部知识库、合同搜索门户,还是自定义搜索引擎,下面的步骤将带您完成所有操作——从从 PDF 中提取文本到运行强大的全文查询。让我们深入了解为何 GroupDocs.Search 能让整个过程顺畅且可扩展。

快速答案

index.search 方法对已创建的索引执行查询,并返回带有相关性评分的匹配文档列表。

  • What is the main purpose? 提取 pdf text java 从 PDF 文件中并使用 GroupDocs.Search 创建可搜索的文档索引。
  • Which library version? GroupDocs.Search 25.4(或最新发布版本)。
  • Do I need a license? 免费试用可用于开发;生产环境需要完整许可证。
  • Can I index PDFs? 是——提取 PDF 文本并将其添加到索引中。
  • How do I run a search? 在添加数据后使用 index.search(query) 方法。

什么是文档索引?

文档索引是从您的文件中提取的可搜索词的结构化集合。它将每个词映射到出现该词的文档,从而在大型仓库中实现快速全文搜索,并将查找时间从分钟降低到毫秒,同时支持排名和相关性功能。

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

GroupDocs.Search 支持 50+ 输入和输出格式,能够在不将整个文件加载到内存的情况下索引 数百万文档,并提供带有布尔、通配符和邻近运算符的 丰富查询语言。这些量化能力使其成为企业级搜索解决方案的理想选择。它还提供内置的语言检测、词干提取和可自定义分析器,以提升多语言内容的搜索准确性。

先决条件

  • 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 下载最新版本。

许可证获取

  • Free Trial – 使用临时许可证测试所有功能。
  • Purchase – 获取完整访问权限和优先支持。

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

使用 Extractor 类加载您的 PDF(或受支持的文档),配置提取选项,然后调用 extractText()。此单行调用返回原始或格式化的文本,准备进行索引。

Extractor 类是 GroupDocs.Search 的核心组件,负责读取文档并生成纯文本或格式化文本。

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

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

如何序列化提取的数据

序列化将提取的文本对象转换为字节数组,便于将其存储到磁盘或通过网络传输,以便后续索引。

SerializationUtil 实用程序提供静态方法,将对象转换为字节流并恢复。

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

如何反序列化提取的数据

当您准备构建索引时,将先前存储的字节数组反序列化回原始的提取对象。

deserialize 方法恢复提取结果的完整状态,确保会话之间不丢失数据。

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

如何创建文档索引

实例化 Index 对象,指定存储文件夹,并配置索引选项,如词向量和停用词处理。

Index 类表示可搜索的容器,保存所有词、文档引用和元数据。

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

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

使用 index.add() 将反序列化的提取结果添加到索引,然后使用 index.search() 查询以获得即时结果。

add 方法将文档的词注册到索引中,而 search 在这些词上执行查询。

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

Pro tip: 使用 index.search("your query", SearchOptions) 可微调相关性排名。

常见使用场景

  1. Document Management Systems – 快速定位合同、发票或政策文件。
  2. Content‑Based Search Engines – 为内部知识库提供全文搜索 Java 能力。
  3. Data Archiving Solutions – 索引历史记录,实现瞬时检索。

性能考虑因素

setStoreTermVectors(boolean) 方法决定是否在索引中存储词向量,影响索引大小和查询性能。

  • Memory Management: 处理超过 500 MB 的批次时增加 JVM 堆大小(例如 -Xmx4g)。
  • Indexing Options: 禁用词向量 (setStoreTermVectors(false)) 可将索引大小降低最多 30 %。
  • Regular Updates: 保持 GroupDocs.Search 为最新版本;每个小版本都包含 10‑15 % 的平均速度提升。

常见问题

Q: How do I handle very large PDF files efficiently?
A: 使用 Extractor 流式读取文件并分块处理;必要时增加 JVM 堆内存。

Q: Can I customize the search query syntax?
A: 是的——GroupDocs.Search 支持布尔运算符、通配符和邻近搜索。

Q: What should I do if serialization fails?
A: 确认所有对象实现 Serializable,并捕获 IOException 记录详细信息。

Q: Is it possible to index only specific sections of a document?
A: 完全可以——在索引前通过 ExtractionOptions 过滤页面或章节。

Q: How do I upgrade to a newer GroupDocs.Search version?
A: 在 pom.xml 中更新版本号并运行 mvn clean install;查阅迁移指南了解可能的破坏性更改。

资源


Last Updated: 2026-07-07
Tested With: GroupDocs.Search 25.4 for Java
Author: GroupDocs

相关教程