使用 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