Выделение результатов поиска Java – Синхронная и Асинхронная индексация
Улучшите свои Java‑приложения, выделяя результаты поиска Java с помощью мощной библиотеки GroupDocs.Search. Независимо от того, работаете ли вы с несколькими файлами или с огромным репозиторием, освоение как синхронной, так и асинхронной индексации позволяет предоставлять быстрые, точные результаты без блокировки потоков вашего приложения.
Быстрые ответы
- Что означает “highlight search results Java”? Это отображение найденных терминов в результатах поиска с визуальными подсказками (например, HTML
<mark>тегами), чтобы пользователи могли видеть, где запрос встречается в каждом документе. - Когда следует использовать синхронную индексацию? Для небольших и средних наборов данных, где требуется мгновенная доступность только что добавленных документов.
- Когда предпочтительна асинхронная индексация? При обработке больших коллекций документов или работе в UI‑потоке, где необходимо сохранять отзывчивость приложения.
- Нужна ли лицензия? Бесплатная пробная версия подходит для разработки; полная лицензия открывает расширенные функции и снимает ограничения по использованию.
- Какая версия Java поддерживается? Java 8 или новее.
Что такое “highlight search results Java”?
Выделение результатов поиска в Java означает взятие необработанных совпадений, возвращаемых GroupDocs.Search, и оборачивание найденных терминов в HTML (или другую разметку), чтобы они выделялись при отображении в пользовательском интерфейсе или веб‑странице. Это улучшает пользовательский опыт, мгновенно показывая контекст каждого совпадения.
Почему использовать GroupDocs.Search для Java?
GroupDocs.Search предоставляет высокопроизводительный, независимый от языка движок, который поддерживает:
- Индексацию и поиск в реальном времени
- Асинхронную обработку больших нагрузок
- Встроенное выделение результатов
- Поддержку многоязычных и пользовательских анализаторов
Предварительные требования
Перед началом убедитесь, что у вас есть:
- Java Development Kit (JDK 8 или новее) установлен.
- IDE, например IntelliJ IDEA или Eclipse.
- Папка, содержащая документы, которые вы хотите проиндексировать.
- Maven для управления зависимостями (или вы можете скачать JAR вручную).
Требуемые библиотеки и зависимости
Добавьте 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.
Настройка окружения
- Проверьте, что переменная JAVA_HOME указывает на совместимый JDK.
- Создайте проект в вашей IDE и добавьте вышеуказанную конфигурацию Maven.
- Подготовьте каталог (например,
documents/) с образцами текстовых, PDF‑ или Word‑файлов.
Как настроить GroupDocs.Search для Java
- Установить библиотеку – Используйте фрагмент Maven выше или скачайте JAR с GroupDocs.
- Получить лицензию – Начните с пробной лицензии, затем перейдите на полную при переходе в продакшн.
- Инициализировать индекс – Ниже приведён фрагмент, показывающий, как создать (или открыть) папку индекса:
import com.groupdocs.search.Index;
// Create an index in the specified folder
Index index = new Index("path/to/index/folder");
Как выделять результаты поиска Java – Синхронная индексация
Синхронная индексация обрабатывает документы сразу, делая только что добавленные файлы доступными для поиска немедленно.
Шаг 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);
}
}
}
DocumentHighlighter автоматически оборачивает найденные термины в теги <mark> (или любой другой формат, который вы настроите), предоставляя выделенные результаты поиска, готовые к отображению.
Как выделять результаты поиска Java – Асинхронная индексация
При работе с тысячами файлов блокировка основного потока нежелательна. Асинхронная индексация позволяет движку работать в фоновом режиме.
Шаг 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);
}
}
Пока индекс строится, ваше приложение может продолжать обслуживать другие запросы. Как только событие StatusChanged сообщает Ready, вы можете безопасно выполнять поиск и получать выделенные результаты поиска Java.
Как индексировать документы java – Практические советы
- Размер пакета: Для огромных коллекций разбивайте папку на более мелкие пакеты, чтобы избежать всплесков памяти.
- Фильтры файлов: Используйте
IndexingOptions.setFileExtensions, чтобы включать только необходимые форматы (например,.pdf,.docx). - Переиндексация: Когда документы меняются, вызывайте
index.update(documentPath)вместо полной перестройки индекса.
Соображения по производительности
- Память: Следите за использованием кучи; увеличьте
-Xmx, если обрабатываете много больших файлов. - CPU: Асинхронная индексация распределяет нагрузку, но всё равно потребляет процессор — контролируйте её с помощью JVisualVM.
- Выделение результатов: Выделение добавляет небольшие накладные расходы; кэшируйте сгенерированный HTML, если нужно многократно отображать результаты.
Часто задаваемые вопросы
В: Можно ли комбинировать синхронную и асинхронную индексацию в одном приложении?
О: Да. Используйте синхронную индексацию для небольших часто обновляемых наборов и асинхронную индексацию для массового импорта или фоновых задач.
В: Как настроить стиль выделения?
О: Предоставьте собственную реализацию DocumentHighlighter, которая записывает нужные HTML, CSS или XML‑теги вокруг найденных терминов.
В: Какие типы файлов поддерживает GroupDocs.Search из коробки?
О: Текстовые, PDF, DOC/DOCX, XLS/XLSX, PPT/PPTX, HTML и многие другие через встроенные парсеры.
В: Можно ли выполнять поиск сразу по нескольким языкам?
О: Конечно. GroupDocs.Search включает многоязычные анализаторы; просто настройте соответствующий Analyzer при создании индекса.
В: Как защитить папку индекса?
О: Храните индекс в защищённом каталоге, задайте правильные разрешения файловой системы и рассмотрите возможность шифрования индекса с помощью функций безопасности библиотеки.
Последнее обновление: 2026-02-08
Тестировано с: GroupDocs.Search 25.4 for Java
Автор: GroupDocs