Выделение результатов поиска Java – Синхронное и асинхронное индексирование

В этом руководстве вы узнаете, как highlight search results Java с использованием библиотеки GroupDocs.Search, и увидите пошагово, как индексировать документы Java как синхронно, так и асинхронно. Независимо от того, создаёте ли вы небольшое настольное приложение или масштабный корпоративный сервис поиска, эти техники позволяют предоставлять мгновенные, визуально чёткие совпадения без блокировки потоков вашего приложения.

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

  • Что означает “highlight search results Java”? Это означает оборачивание каждого найденного термина в возвращаемых фрагментах разметкой (например, <mark>), чтобы пользователи могли мгновенно увидеть контекст совпадения.
  • Когда следует использовать синхронное индексирование? Используйте его для небольших‑средних коллекций, когда документ должен стать доступным для поиска сразу после добавления.
  • Когда асинхронное индексирование предпочтительно? Выбирайте его для больших пакетов или когда UI‑поток должен оставаться отзывчивым, пока индекс создаётся в фоновом режиме.
  • Нужна ли лицензия? Бесплатная пробная версия подходит для разработки; полная лицензия снимает ограничения и открывает расширенные функции.
  • Какая версия Java поддерживается? Java 8 или новее.

Что такое “highlight search results Java”?

highlight search results java — это процесс получения сырых данных о совпадениях из GroupDocs.Search и вставки визуальных подсказок — обычно HTML‑тегов <mark> — вокруг каждого найденного термина. Это делает фрагменты результатов мгновенно читаемыми на веб‑странице или в компоненте Swing, улучшая пользовательский опыт, показывая точно, где появляется запрос.

Почему использовать GroupDocs.Search для Java?

GroupDocs.Search предоставляет высокопроизводительный, независимый от языка движок, который может обрабатывать до 5 000 документов в секунду, поддерживать более 30 форматов файлов и индексировать коллекции из 10 млн документов без загрузки всего корпуса в память. Встроенное выделение, индексирование в реальном времени и многоязычные анализаторы делают его идеальным для систем управления контентом, каталогов e‑commerce и корпоративных репозиториев документов.

Требования

  • Java Development Kit (JDK 8 или новее) установлен и JAVA_HOME правильно задан.
  • IDE, например IntelliJ IDEA или Eclipse.
  • Папка (например, documents/) с файлами, которые нужно индексировать — обычный текст, PDF, DOCX и т.д.
  • Maven для управления зависимостями (или можно добавить JAR вручную).

Требуемые библиотеки и зависимости

Add GroupDocs.Search to your 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 для Java — релизы.

Настройка окружения

  • Убедитесь, что JAVA_HOME указывает на совместимый JDK.
  • Создайте новый Maven‑проект и вставьте приведённый выше фрагмент в раздел <dependencies>.
  • Поместите образцы файлов в каталог, например src/main/resources/documents/.

Как настроить GroupDocs.Search для Java

Index — это основной класс, представляющий поисковую коллекцию, хранящуюся на диске.

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

Класс Index является ядром, представляющим поисковую коллекцию на диске. После его создания все операции индексирования и запросов проходят через этот объект.

  1. Install the library – Use the Maven snippet above or download the JAR from GroupDocs.
  2. Obtain a license – Start with a trial license; replace it with a production key before deployment.
  3. Initialize the index – The following snippet shows how to create (or open) an index folder:
import com.groupdocs.search.Index;

// Create an index in the specified folder
Index index = new Index("path/to/index/folder");

Как выделять результаты поиска Java – синхронное индексирование

DocumentHighlighter — утилитный класс, генерирующий выделенные фрагменты из результатов поиска.

Загрузите индекс, добавьте документы с помощью index.add(documentPath), выполните запрос и затем вызовите DocumentHighlighter, чтобы обернуть совпадения тегами <mark>. Весь процесс выполняется в вызывающем потоке, поэтому документ становится доступным для поиска сразу после возврата add для конечных пользователей.

Шаг 1: создать индекс и добавить обработку ошибок

import com.groupdocs.search.*;
import com.groupdocs.search.events.*;
import java.nio.file.Paths;

public class SynchronousIndexingFeature {
    public static void main(String[] args) {
        String indexFolder = "YOUR_DOCUMENT_DIRECTORY/SynchronousIndexing";
        String documentsFolder = YOUR_DOCUMENT_DIRECTORY; // Replace with actual directory path

        Index index = new Index(indexFolder);

        // Handle errors
        index.getEvents().ErrorOccurred.add(new EventHandler<IndexErrorEventArgs>() {
            @Override
            public void invoke(Object sender, IndexErrorEventArgs args) {
                System.out.println(args.getMessage());
            }
        });

Шаг 2: добавить документы и выполнить поиск

        // Add documents
        index.add(documentsFolder);

        // Perform a search
        String query = "tincidunt";
        SearchResult result = index.search(query);

Шаг 3: обработать результаты и выделить результаты поиска Java

        for (int i = 0; i < result.getDocumentCount(); i++) {
            FoundDocument document = result.getFoundDocument(i);
            System.out.println(": Document: " + document.getDocumentInfo().getFilePath());
            System.out.println(": Occurrences: " + document.getOccurrenceCount());
        }

        // Highlight results
        if (result.getDocumentCount() > 0) {
            FoundDocument document = result.getFoundDocument(0);
            String path = YOUR_OUTPUT_DIRECTORY + "/Highlighted.html";
            OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, path);
            DocumentHighlighter highlighter = new DocumentHighlighter(outputAdapter);
            index.highlight(document, highlighter);
        }
    }
}

Как выделять результаты поиска Java – асинхронное индексирование

IndexingOptions настраивает, как будет работать процесс индексирования, включая синхронный или асинхронный режим.

Настройте IndexingOptions для работы в фоновом режиме, подпишитесь на события StatusChanged и позвольте движку индексировать файлы, пока ваш UI продолжает обслуживать другие запросы. Как только статус изменится на Ready, вы сможете выполнять поиски и получать выделенные фрагменты так же, как в синхронном режиме.

AsyncIndexingListener получает обновления прогресса, позволяя отображать индикатор выполнения или вести журнал статуса без блокировки основного потока.

Шаг 1: настроить индекс с обработчиками событий

import com.groupdocs.search.*;
import com.groupdocs.search.events.*;

public class AsynchronousIndexingFeature {
    public static void main(String[] args) {
        String indexFolder = "YOUR_DOCUMENT_DIRECTORY/AsynchronousIndexing";
        String documentsFolder = YOUR_DOCUMENT_DIRECTORY; // Replace with actual directory path

        Index index = new Index(indexFolder);

        // Handle errors and status changes
        index.getEvents().ErrorOccurred.add(new EventHandler<IndexErrorEventArgs>() {
            @Override
            public void invoke(Object sender, IndexErrorEventArgs args) {
                System.out.println(args.getMessage());
            }
        });

        index.getEvents().StatusChanged.add(new EventHandler<BaseIndexEventArgs>() {
            @Override
            public void invoke(Object sender, BaseIndexEventArgs args) {
                if (args.getStatus() != IndexStatus.Ready || args.getStatus() == IndexStatus.Failed) {
                    System.out.println("Indexing completed.");
                }
            }
        });

Шаг 2: включить асинхронный режим и начать индексирование

        // Set up async indexing options
        IndexingOptions options = new IndexingOptions();
        options.setAsync(true);

        // Add documents asynchronously
        index.add(documentsFolder, options);
    }
}

Как индексировать документы Java – практические советы

index.update(path) обновляет существующий документ в индексе файлом по указанному пути.

Разбивайте большие коллекции на пакеты по 1 000–5 000 файлов, фильтруйте по расширениям, чтобы избежать лишнего парсинга, и используйте index.update(path) для изменённых файлов вместо полной перестройки индекса. Такие практики снижают потребление памяти и делают время индексирования предсказуемым, поддерживая согласованность.

  • Batch size: Для огромных коллекций разбивайте папку на более мелкие пакеты, чтобы избежать всплесков памяти.
  • File filters: Используйте IndexingOptions.setFileExtensions, чтобы включать только нужные форматы (например, .pdf, .docx).
  • Re‑indexing: Когда документ меняется, вызывайте index.update(documentPath) вместо полного воссоздания индекса.

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

  • Memory: Следите за использованием кучи; увеличьте -Xmx, если обрабатываете одновременно много больших файлов.
  • CPU: Асинхронное индексирование распределяет нагрузку по потокам, но всё равно потребляет процессор — отслеживайте использование с помощью JVisualVM.
  • Result highlighting: Выделение добавляет небольшие накладные расходы (≈ 2–5 ms на результат). Кешируйте сгенерированный HTML, если нужно многократно отображать одни и те же фрагменты.

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

Q: Можно ли комбинировать синхронное и асинхронное индексирование в одном приложении?
A: Да. Используйте синхронное индексирование для небольших, часто обновляемых наборов и асинхронное для массовых импортов или фоновых задач.

Q: Как настроить стиль выделения?
A: Предоставьте собственную реализацию DocumentHighlighter, которая будет записывать нужные HTML, CSS или XML‑теги вокруг найденных терминов.

Q: Какие типы файлов поддерживает GroupDocs.Search из коробки?
A: Текст, PDF, DOC/DOCX, XLS/XLSX, PPT/PPTX, HTML и многие другие через встроенные парсеры — более 30 форматов в общей сложности.

Q: Можно ли искать сразу по нескольким языкам?
A: Абсолютно. GroupDocs.Search включает многоязычные анализаторы; просто настройте соответствующий Analyzer при создании индекса.

Q: Как защитить папку с индексом?
A: Храните индекс в защищённом каталоге, задайте строгие права доступа к файловой системе и, при необходимости, шифруйте индекс с помощью функций безопасности библиотеки.


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

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