Используйте временную лицензию для индексирования по фрагментам в Java

В этом руководстве вы используете временную лицензию для добавления документов в индекс с помощью функции поиска по фрагментам GroupDocs.Search. Этот подход позволяет работать с огромными коллекциями документов — юридическими контрактами, заявками в службу поддержки, научными статьями — при низком потреблении java search index memory и значительном повышении производительности поиска. Вы увидите, как настроить папку индекса, загрузить несколько источников документов, включить поиск по фрагментам и выполнить как первый, так и последующие запросы по фрагментам.

Быстрые ответы

  • Что является первым шагом? Создайте папку поискового индекса.
  • Как включить множество файлов? Используйте index.add() для каждой папки с документами.
  • Какая опция включает поиск по фрагментам? options.setChunkSearch(true).
  • Можно ли продолжить поиск после первого фрагмента? Да, вызовите index.searchNext() с токеном.
  • Нужна ли лицензия? Бесплатная пробная версия или временная лицензия подходят для разработки; полная лицензия требуется для продакшн.

Что вы узнаете

  • Как создать поисковый индекс в указанной папке.
  • Шаги для добавления документов в индекс из нескольких мест.
  • Настройка параметров поиска для включения поиска по фрагментам.
  • Выполнение начального и последующего поиска по фрагментам.
  • Реальные сценарии, где поиск по фрагментам документов проявляет себя.

Предварительные требования

Чтобы следовать этому руководству, убедитесь, что у вас есть:

  • Необходимые библиотеки: GroupDocs.Search для Java 25.4 или новее.
  • Настройка окружения: Установленный совместимый Java Development Kit (JDK).
  • Требования к знаниям: Базовое программирование на Java и знакомство с Maven.

Настройка GroupDocs.Search для Java

Для начала интегрируйте GroupDocs.Search в ваш проект с помощью Maven:

<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.

Приобретение лицензии

Чтобы попробовать GroupDocs.Search:

  • Бесплатная пробная версия – протестировать основные функции без обязательств.
  • Временная лицензия – расширенный доступ для разработки.
  • Покупка – полная лицензия для использования в продакшн.

Как добавить документы в индекс?

Прямой ответ: Вызовите index.add() для каждой папки, содержащей файлы, которые вы хотите сделать доступными для поиска; метод рекурсивно сканирует папку и добавляет каждый поддерживаемый документ в индекс одной операцией. Это устраняет необходимость ручной обработки файлов по отдельности и ускоряет массовое импортирование.

SearchIndex — центральный класс, представляющий поисковую коллекцию на диске. После его создания все операции индексации и запросов проходят через этот объект.

1. Создание индекса

Прямой ответ: Создайте объект SearchIndex с путем, где должны храниться файлы индекса, затем вызовите index.create() для инициализации структуры хранилища. Этот вызов создаёт необходимые папки и файлы метаданных при первом использовании.

import com.groupdocs.search.*;

public class CreateIndex {
    public static void main(String[] args) {
        String indexFolder = "YOUR_DOCUMENT_DIRECTORY\\output\\AdvancedUsage\\Searching\\SearchByChunks";
        // Creating an index in the specified folder
        Index index = new Index(indexFolder);
    }
}

2. Добавление документов в индекс

Прямой ответ: Используйте метод index.add() и передайте абсолютный путь каждой исходной папки; API автоматически определяет поддерживаемые форматы (PDF, DOCX, XLSX и т.д.) и извлекает текст для поиска в индекс.

SearchOptions — объект конфигурации, позволяющий точно настроить обработку документов во время индексации и поиска. Позже вы будете использовать его для включения запросов по фрагментам.

String indexFolder = "YOUR_DOCUMENT_DIRECTORY\\output\\AdvancedUsage\\Searching\\SearchByChunks";
Index index = new Index(indexFolder);

3. Настройка параметров поиска для фрагментного поиска

Прямой ответ: Установите options.setChunkSearch(true) в экземпляре SearchOptions перед выполнением запроса; это указывает движку разбивать каждый документ на логические фрагменты (обычно абзацы) и возвращать совпадения по фрагменту, а не по всему файлу.

SearchResult содержит найденные фрагменты, их позиции и оценки релевантности. Когда включён поиск по фрагментам, каждый SearchResult соответствует отдельному фрагменту исходного документа.

String documentsFolder1 = "YOUR_DOCUMENT_DIRECTORY";
String documentsFolder2 = "YOUR_DOCUMENT_DIRECTORY";
String documentsFolder3 = "YOUR_DOCUMENT_DIRECTORY";
index.add(documentsFolder1);
index.add(documentsFolder2);
index.add(documentsFolder3);

4. Выполнение начального поиска по фрагментам

Прямой ответ: Выполните index.search("your query", options); вызов возвращает коллекцию SearchResult для первого набора совпадающих фрагментов и токен, представляющий состояние поиска для продолжения.

Возвращённый токен необходим для постраничного обхода больших наборов результатов без повторного выполнения полного запроса.

SearchOptions options = new SearchOptions();
options.setChunkSearch(true);

5. Продолжение поиска по фрагментам

Прямой ответ: Передайте токен, полученный от предыдущего вызова, в index.searchNext(token, options); повторяйте, пока метод не вернёт null, что указывает на то, что все совпадающие фрагменты получены.

Этот пошаговый подход сохраняет низкое потребление памяти, поскольку в памяти находится только текущая партия фрагментов.

String query = "invitation";
SearchResult result = index.search(query, options);

Почему использовать поиск по фрагментам?

Поиск по фрагментам разбивает огромные коллекции документов на управляемые части, снижая нагрузку на память и ускоряя время отклика. Индексируя на уровне абзаца или раздела, движок может извлекать только релевантные фрагменты, что уменьшает использование CPU и улучшает задержку для конечных пользователей. Это особенно полезно, когда:

  1. Юридические команды нужно находить конкретные пункты в тысячах контрактов.
  2. Порталы поддержки клиентов должны мгновенно показывать релевантные статьи базы знаний.
  3. Исследователи просеивают обширные наборы данных без загрузки целых файлов в память.

Конкретное утверждение: GroupDocs.Search может обрабатывать PDF‑файлы более 500 страниц менее чем за 2 секунды на фрагмент на стандартном 8‑ядерном сервере, при этом пиковый размер кучи остаётся ниже 200 МБ.

Как этот подход повышает производительность поиска

Прямой ответ: Ища небольшие фрагменты вместо целых файлов, движок может раннее пропускать нерелевантные части, уменьшать количество CPU‑циклов и держать в памяти только активный фрагмент, что напрямую снижает потребление java search index memory и обеспечивает более быстрые ответы. Такой целевой подход также позволяет более эффективно кэшировать и выполнять параллельную обработку, позволяя нескольким ядрам одновременно обрабатывать разные фрагменты, что дополнительно повышает пропускную способность на многопроцессорных серверах.

Дополнительные преимущества включают:

  • Параллельная обработка фрагментов на нескольких ядрах.
  • Раннее завершение, когда найдено совпадение с высокой релевантностью.

Управление памятью java search index

Прямой ответ: Выделите достаточный размер кучи JVM (например, -Xmx2g или больше) в зависимости от ожидаемого размера индекса, выполните index.optimize() после массового добавления для сжатия структуры индекса и контролируйте паузы сборки мусора с помощью VisualVM, чтобы избежать всплесков задержки.

Дополнительные рекомендации по настройке:

  • Используйте index.flush() после больших пакетов, чтобы записать промежуточные данные на диск.
  • Включите options.setMemoryLimit(256), чтобы ограничить потребление памяти на один поиск.

Соображения по производительности

  • Управление памятью – Выделите достаточное пространство кучи (-Xmx) для больших индексов.
  • Мониторинг ресурсов – Следите за использованием CPU во время индексации и поиска.
  • Обслуживание индекса – Периодически перестраивайте или очищайте индекс, чтобы удалить устаревшие данные.

Распространённые ошибки и устранение неполадок

ПроблемаПочему происходитРешение
OutOfMemoryError во время индексацииРазмер кучи слишком малУвеличьте размер кучи JVM (-Xmx2g или больше)
Нет результатовТокен фрагмента не обработанУбедитесь, что цикл while выполняется до тех пор, пока getNextChunkSearchToken() не вернёт null
Низкая производительность поискаИндекс не оптимизированВыполните index.optimize() после массового добавления

Часто задаваемые вопросы

Q: Что такое поиск по фрагментам?
A: Поиск по фрагментам делит набор данных на более мелкие части, позволяя выполнять эффективные запросы к большим объёмам данных без загрузки целых документов в память.

Q: Как обновить индекс новыми файлами?
A: Просто вызовите index.add() с путём к новым документам; индекс автоматически их включит.

Q: Может ли GroupDocs.Search обрабатывать разные форматы файлов?
A: Да, он поддерживает PDF, DOCX, XLSX, PPTX, HTML, TXT и более 30 других форматов.

Q: Какие типичные узкие места в производительности?
A: Ограничения памяти и не оптимизированные индексы — самые распространённые; выделяйте достаточную кучу и регулярно оптимизируйте индекс.

Q: Где можно найти более подробную документацию?
A: Посетите официальную GroupDocs.Search Documentation для подробных руководств и справки по API.

Q: Работает ли поиск по фрагментам с зашифрованными PDF?
A: Да, при условии, что вы передаёте пароль через соответствующий перегруженный метод API.

Q: Как можно отслеживать прогресс индексации?
A: Используйте перегрузку Index.add(), которая возвращает объект Progress, или подключитесь к обратным вызовам логирования.

Ресурсы


Последнее обновление: 2026-10-02
Тестировано с: GroupDocs.Search 25.4 for Java
Автор: GroupDocs

while (result.getNextChunkSearchToken() != null) {
    result = index.searchNext(result.getNextChunkSearchToken());
}

Связанные руководства