Как создать индекс с распознаванием символов с помощью GroupDocs.Search for Java
В современных приложениях, работающих с большим количеством документов, как создать индекс, учитывающий нюансы вашего текста — такие как дефисы, подчёркивания или специфические для языка символы — имеет решающее значение для быстрого и точного поиска. В этом руководстве мы пройдем настройку распознавания символов в GroupDocs.Search for Java, охватывая как обычные символы (буквы, цифры, подчёркивания), так и комбинированные символы (например, дефисы). К концу вы сможете настроить индекс, соответствующий точным требованиям вашего сценария OCR или поиска по изображениям, будь то индексация номеров дел, репозиториев исходного кода или многоязычных PDF‑файлов.
Быстрые ответы
- Что значит «создать пользовательский поисковый индекс»? Это означает настройку индекса так, чтобы определённые символы рассматривались как буквы или комбинированные символы, а не игнорировались.
- Какая библиотека используется? GroupDocs.Search for Java (v25.4 на момент написания).
- Нужна ли лицензия? Бесплатная trial‑версия подходит для разработки; платная лицензия требуется для продакшн‑использования.
- Можно ли индексировать и PDF, и изображения? Да — GroupDocs.Search поддерживает OCR для изображений и PDF, если правильно сконфигурирован.
- Обязательно ли использовать Maven? Maven рекомендуется для управления зависимостями, но можно также использовать Gradle или ручные JAR‑файлы.
Что такое пользовательский поисковый индекс?
Пользовательский поисковый индекс позволяет задать, как поисковый движок интерпретирует символы. По умолчанию многие символы игнорируются, что может приводить к пропуску совпадений, например, номеров дел (2023-AB-456) или фрагментов кода (my_variable). Настройка словаря алфавита даёт полный контроль над тем, что движок считает поисковым текстом.
Почему стоит настраивать обычные и комбинированные символы для номеров дел?
- Обычные символы (буквы, цифры, подчёркивания) токенизируются отдельно, позволяя выполнять точный поиск идентификаторов.
- Комбинированные символы (дефисы, слеши) сохраняют связанные токены вместе, предотвращая нежелательное разбиение номеров дел, артикулов или путей к файлам.
- Такая конфигурация оптимизирует производительность поискового индекса, уменьшая фрагментацию токенов и повышая релевантность для контента, полученного с помощью OCR.
Предварительные требования
- 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>
Также можно скачать последние JAR‑файлы по ссылке GroupDocs.Search for Java releases.
Приобретение лицензии
- Бесплатная trial‑версия — идеально для ранних экспериментов.
- Временная лицензия — полезна для длительных циклов разработки.
- Продакшн‑лицензия — обязательна для коммерческого развертывания.
Получить лицензию можно в официальном портале: 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 — Обычные символы
Обзор
Обычные символы рассматриваются как независимые токены. Это удобно, когда требуется, чтобы цифры, буквы и подчёркивания были доступны для поиска точно в том виде, в каком они записаны.
Пошаговая реализация
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 — Комбинированные символы
Обзор
Комбинированные символы (например, дефис) часто соединяют два слова. Пометка их как комбинированных заставляет движок сохранять окружающие токены вместе при индексации.
Пошаговая реализация
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‑символов, включив нужные диапазоны и обеспечив точный кросс‑языковой поиск.
Сценарий 4 — Индексация PDF‑изображений
При индексации отсканированных PDF или файлов‑изображений вывод OCR часто содержит смешанные символы. Правильная настройка обычных и комбинированных символов оптимизирует производительность поискового индекса для контента, основанного на изображениях.
Соображения по производительности
- Управление ресурсами — следите за использованием heap; большие индексы выигрывают от инкрементных коммитов.
- Сборка мусора — освобождайте объекты
Index, когда они больше не нужны, чтобы JVM могла вернуть память. - Оптимизация индекса — периодически вызывайте
index.optimize()(если доступно) для компактизации индекса и ускорения запросов.
Заключение
Теперь вы знаете как создать индекс, различающий обычные и комбинированные символы с помощью GroupDocs.Search for Java. Такой тонко настроенный контроль позволяет создавать OCR‑ориентированные, высокопроизводительные поисковые решения, адаптированные под юридические, разработческие или многоязычные среды.
Следующие шаги
- Поэкспериментируйте с дополнительными диапазонами Unicode для нелатинских алфавитов.
- Сочетайте настройку символов с другими возможностями GroupDocs.Search, такими как стемминг или синонимы.
- Интегрируйте индекс в REST‑API, чтобы предоставить поисковые возможности фронтенд‑приложениям.
Часто задаваемые вопросы
В: Какова цель CharacterType.Letter?
О: Он указывает индексу рассматривать переданные символы как обычные буквы, поэтому они токенизируются отдельно при индексации.
В: Можно ли смешивать обычные и комбинированные символы в одном индексе?
О: Да — просто вызывайте setRange для каждого типа; словарь одновременно обработает обе конфигурации.
В: Нужно ли перестраивать индекс после изменения алфавита?
О: Обязательно. Изменения в словаре символов влияют на токенизацию, поэтому необходимо переиндексировать документы, чтобы новые правила вступили в силу.
В: Есть ли ограничение на количество пользовательских символов?
О: Библиотека поддерживает полный диапазон Unicode; производительность может снизиться, если добавить чрезвычайно большой набор, поэтому ограничьте его только необходимыми символами.
В: Как это влияет на точность OCR?
О: Согласовав набор символов индекса с выводом OCR‑движка, вы уменьшаете количество ложных отрицаний и повышаете общую релевантность поиска.
Последнее обновление: 2026-03-17
Тестировано с: GroupDocs.Search 25.4 for Java
Автор: GroupDocs