使用 GroupDocs.Search for Java 创建带字符识别的自定义搜索索引

在现代文档密集型应用中,创建自定义搜索索引 能够理解文本细微差别——例如连字符、下划线或特定语言符号——对于实现快速、精准的检索至关重要。本教程将手把手演示如何在 GroupDocs.Search for Java 中配置字符识别,涵盖普通字符(字母、数字、下划线)和混合字符(如连字符)。完成后,您将能够定制符合 OCR 或图像搜索场景的索引。

快速答疑

  • “创建自定义搜索索引”是什么意思? 这意味着配置索引,使特定符号被视为字母或混合字符,而不是被忽略。
  • 使用哪个库? GroupDocs.Search for Java(撰写时为 v25.4)。
  • 需要许可证吗? 开发阶段可使用免费试用版;生产环境需要付费许可证。
  • 可以同时索引 PDF 和图像吗? 可以——GroupDocs.Search 在正确配置后支持对图像和 PDF 进行 OCR。
  • 必须使用 Maven 吗? 推荐使用 Maven 管理依赖,也可以使用 Gradle 或手动 JAR 包。

什么是自定义搜索索引?

自定义搜索索引允许您定义搜索引擎对字符的解释方式。默认情况下,许多符号会被忽略,这可能导致诸如案件编号 (ABC-123) 或代码片段 (my_variable) 等内容匹配失败。通过调整字母表字典,您可以完全控制引擎将哪些字符视为可搜索文本。

为什么要配置普通字符和混合字符?

  • 普通字符(字母、数字、下划线)作为独立的 token 处理,提升精确匹配搜索效果。
  • 混合字符(连字符、斜杠)用于连接词语;将其配置为混合字符可防止不必要的 token 拆分,这对法律引用、产品编码或源码索引尤为关键。

前置条件

  • 已安装 JDK 8 或更高版本。
  • 已安装 Maven 用于依赖管理。
  • 已获取 GroupDocs.Search for Java 库(通过 Maven 或官网下载)。

必需的库和依赖

pom.xml 中添加仓库和依赖条目(如下所示)。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 下载最新的 JAR 包。

许可证获取

  • 免费试用 – 适合早期实验。
  • 临时许可证 – 适用于较长的开发周期。
  • 正式许可证 – 商业部署必需。

从官方门户获取许可证: GroupDocs

基本初始化

下面的代码片段展示了创建空索引的最小代码。保持原样;后续会在此基础上继续构建。

import com.groupdocs.search.*;

public class GroupDocsSearchSetup {
    public static void main(String[] args) {
        String indexFolder = "YOUR_OUTPUT_DIRECTORY";
        String documentFolder = "YOUR_DOCUMENT_DIRECTORY";

        Index index = new Index(indexFolder);
        
        System.out.println("GroupDocs.Search setup completed!");
    }
}

设置 GroupDocs.Search for Java

通过 Maven 安装

前置条件 部分提供的 Maven 配置即为全部所需。添加后,运行 mvn clean install 下载二进制文件。

环境搭建要求

  • 确保 索引文件夹文档文件夹 已在磁盘上创建。
  • 使用绝对路径或在 IDE 中正确配置相对路径解析。

实现指南

下面我们分别演示两大功能:普通字符混合字符。每个功能遵循相同的步骤——定义路径、创建索引、设置字符字典,最后索引文档。

功能 1 – 普通字符

概述

普通字符被视为独立的 token。当您希望数字、字母和下划线能够精确匹配时,这种方式非常理想。

步骤实现

1️⃣ 设置路径
定义索引存放位置以及源文档所在目录。

String indexFolder = "YOUR_OUTPUT_DIRECTORY/AdvancedUsage/Indexing/CharacterTypes/RegularCharacters";
String documentFolder = "YOUR_DOCUMENT_DIRECTORY";

2️⃣ 创建并配置索引
实例化索引并清除任何已有的字母表配置。

Index index = new Index(indexFolder);
index.getDictionaries().getAlphabet().clear();

3️⃣ 定义普通字符
构建包含数字、拉丁字母和下划线的字符数组。

StringBuilder sb = new StringBuilder();
for (char i = 0x0030; i <= 0x0039; i++) { // Digits
    sb.append(i);
}
for (char i = 0x0041; i <= 0x005A; i++) { // Latin capital letters
    sb.append(i);
}
sb.append(0x005F); // Underscore
for (char i = 0x0061; i <= 0x007A; i++) { // Latin small letters
    sb.append(i);
}

// Convert to character array and set as alphabet range
char[] characters = new char[sb.length()];
sb.getChars(0, sb.length(), characters, 0);
index.getDictionaries().getAlphabet().setRange(characters, CharacterType.Letter);

4️⃣ 索引文档
将源文件夹中的所有文件添加到新配置的索引中。

index.add(documentFolder);

功能 2 – 混合字符

概述

混合字符(如连字符)通常用于连接两个词。将其标记为 混合 可让引擎在索引时保持相邻 token 的整体性。

步骤实现

1️⃣ 设置路径

String indexFolder = "YOUR_OUTPUT_DIRECTORY/AdvancedUsage/Indexing/CharacterTypes/BlendedCharacters";
String documentFolder = "YOUR_DOCUMENT_DIRECTORY";

2️⃣ 创建并配置索引

Index index = new Index(indexFolder);

3️⃣ 定义混合字符
这里我们告诉字典将连字符视为混合字符。

index.getDictionaries().getAlphabet().setRange(new char[] { '-' }, CharacterType.Blended);

4️⃣ 索引文档

index.add(documentFolder);

实际应用

用例 1 – 法律文档管理

法律文件常包含类似 2023-AB-456 的案件编号。通过配置下划线和连字符,搜索能够返回完整匹配而不会拆分标识符。

用例 2 – 源代码仓库

开发者需要搜索代码片段,其中下划线 (my_variable) 和连字符 (my-function) 具有重要意义。自定义字符识别确保搜索引擎尊重这些符号。

用例 3 – 多语言数据集

处理使用额外字母表的语言时,可将普通字符集扩展至相应的 Unicode 范围,从而保证跨语言搜索的准确性。

性能考虑

  • 资源管理 – 关注堆内存使用;大型索引建议使用增量提交。
  • 垃圾回收 – 完成后释放 Index 对象,以便 JVM 回收内存。
  • 索引优化 – 定期调用 index.optimize()(若可用)以压缩索引并提升查询速度。

结论

现在,您已经掌握了使用 GroupDocs.Search for Java 创建自定义搜索索引 并区分普通字符与混合字符的完整流程。这种细粒度的控制使您能够构建面向 OCR、法律、开发或多语言环境的高性能搜索解决方案。

后续步骤

  • 为非拉丁字母表尝试添加额外的 Unicode 范围。
  • 将字符配置与 GroupDocs.Search 的其他功能(如词干提取或同义词)结合使用。
  • 将索引集成到 REST API 中,为前端应用提供搜索能力。

常见问题

Q: CharacterType.Letter 的作用是什么?
A: 它告诉索引将提供的字符视为普通字母,在索引时会单独进行 token 化。

Q: 可以在同一个索引中混合使用普通字符和混合字符吗?
A: 可以——只需分别调用 setRange 配置每种类型,字典会同时处理这两种配置。

Q: 更改字母表后需要重新构建索引吗?
A: 必须。字符字典的更改会影响 token 化方式,必须重新索引文档才能生效。

Q: 自定义字符的数量有限制吗?
A: 库支持完整的 Unicode 范围;如果添加极大量字符可能会影响性能,建议仅定义实际需要的字符。

Q: 这会如何影响 OCR 准确性?
A: 通过使索引的字符集与 OCR 引擎的输出保持一致,可减少漏检,提高整体搜索相关性。


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