Как настроить сеть GroupDocs.Search в Java – ускоренный поиск
В современных, ориентированных на данные приложениях, how to configure GroupDocs правильно является краеугольным камнем для обеспечения молниеносных, релевантных результатов поиска в огромных репозиториях документов. Независимо от того, создаёте ли вы корпоративный портал, базу знаний или каталог продукции, правильно настроенная сеть GroupDocs.Search позволяет масштабироваться горизонтально, внедрять логику синонимов и контролировать задержку. В этом руководстве мы пройдём каждый шаг, необходимый для настройки, развертывания и тонкой настройки сети GroupDocs.Search с использованием Java, а также дадим практические рекомендации по добавлению синонимов в индекс и управлению жизненным циклом узлов.
Быстрые ответы
- What is the primary benefit of configuring a GroupDocs.Search network? Это обеспечивает распределённое индексирование и запросы, улучшая производительность и масштабируемость.
- Do I need a license to run the examples? Бесплатная пробная версия подходит для разработки; коммерческая лицензия требуется для продакшн.
- Can synonyms be added without rebuilding the index? Да — используйте словарь синонимов во время выполнения, чтобы add synonyms to index.
- How many nodes can I deploy? Вы можете развернуть столько узлов, сколько позволяет ваша инфраструктура; каждый узел работает на своём порту.
- What Java version is required? Поддерживается JDK 8 или новее, с полной совместимостью до JDK 21.
Что такое настройка сети GroupDocs.Search?
GroupDocs.Search network — это набор процессов JVM, которые совместно индексируют и выполняют запросы к общему набору документов. Он состоит из мастер‑узла, который управляет одним или несколькими рабочими узлами (shards). Сеть абстрагирует underlying storage, поэтому один запрос автоматически рассылается каждому шару, а результаты объединяются перед возвратом вызывающему.
Зачем настраивать сеть GroupDocs.Search?
Настройка сети GroupDocs.Search даёт вам три конкретных преимущества: scalability, reliability и enhanced relevance. Распределяя нагрузку индексирования по до 20 узлам, каждый из которых обрабатывает shard объёмом 5 GB, вы можете сократить общее время индексирования примерно на 70 % по сравнению с однопользовательской конфигурацией. Добавление словаря синонимов повышает recall до 35 % для запросов, использующих альтернативную терминологию, а избыточность узлов гарантирует 99,9 % времени безотказной работы во время обслуживаний.
Предварительные требования
- Java Development Kit (JDK) 8 – 21 (любая LTS‑версия)
- Maven 3.5 + для сборки проекта
- Знание базового синтаксиса Java и управления зависимостями Maven
- Доступ к библиотеке GroupDocs.Search for Java (доступна через Maven Central или официальную страницу релизов)
Настройка GroupDocs.Search для Java
Добавьте репозиторий и зависимость в ваш Maven pom.xml:
Следующий XML‑фрагмент добавляет репозиторий GroupDocs.Search и зависимость библиотеки.
<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.
Приобретение лицензии
- Free Trial – Исследуйте основные функции бесплатно.
- Temporary License – Откройте полный набор возможностей для краткосрочного тестирования.
- Commercial License – Требуется для продакшн‑развёртываний и получения премиум‑поддержки.
Базовая инициализация и настройка
Создайте простой Java‑класс, чтобы проверить корректную загрузку библиотеки:
Класс SampleInitializer демонстрирует загрузку движка GroupDocs.Search.
import com.groupdocs.search.*;
public class SearchSetup {
public static void main(String[] args) {
// Initialize the index
Index index = new Index("YOUR_INDEX_DIRECTORY");
System.out.println("GroupDocs.Search is ready to use!");
}
}
Пошаговое руководство по настройке сети GroupDocs.Search
1. Настройка поисковой сети
Определите базовую папку документов и начальный порт для коммуникации узлов.
SearchNetworkConfig содержит конфигурацию узлов сети.
import com.groupdocs.search.dictionaries.*;
import com.groupdocs.search.scaling.configuring.*;
public class ConfigureSearchNetwork {
public static void run() {
String basePath = "YOUR_DOCUMENT_DIRECTORY/AdvancedUsage/Scaling/ManagingDictionaries/";
int basePort = 49128;
Configuration configuration = ConfiguringSearchNetwork.configure(basePath, basePort);
// Configuration details and setup logic
}
}
- basePath – Каталог, где находятся словари (например, файлы синонимов).
- basePort – Первый порт; последующие узлы увеличивают значение от него.
2. Развёртывание узлов поисковой сети
Запустите несколько рабочих узлов, использующих одну и ту же конфигурацию.
SearchNode представляет отдельный узел в распределённой сети.
import com.groupdocs.search.scaling.*;
public class DeploySearchNetworkNodes {
public static void run() {
String basePath = "YOUR_DOCUMENT_DIRECTORY/AdvancedUsage/Scaling/ManagingDictionaries/";
int basePort = 49128;
Configuration configuration = new Configuration();
SearchNetworkNode[] nodes = SearchNetworkDeployment.deploy(basePath, basePort, configuration);
// Node deployment logic
}
}
Каждый узел работает на своём порту (basePort + index) и содержит shard общего индекса, позволяя параллельно выполнять как индексирование, так и выполнение запросов.
3. Подписка на события узлов
Отслеживайте состояние, прогресс индексирования и ошибки, присоединив слушатель событий к мастер‑узлу.
NetworkEventListener обрабатывает обратные вызовы для событий жизненного цикла узла.
import com.groupdocs.search.scaling.*;
public class SubscribeToNodeEvents {
public static void run() {
SearchNetworkNode masterNode = new SearchNetworkNode();
SearchNetworkNodeEvents.subscribe(masterNode);
// Event subscription logic
}
}
Обратные вызовы событий позволяют реагировать на запуск/остановку узла, завершение индексирования и неожиданные сбои, предоставляя полную наблюдаемость распределённой системы.
4. Добавление синонимов в индексатор узла
Повышайте релевантность, используя add synonyms to index во время выполнения.
SynonymDictionary позволяет добавлять группы синонимов в индексатор.
import com.groupdocs.search.dictionaries.*;
import com.groupdocs.search.scaling.*;
public class AddSynonyms {
public static void run(SearchNetworkNode node) {
String[] group = { "efficitur", "tristique", "venenatis" };
boolean clearBeforeAdding = true;
Indexer indexer = node.getIndexer();
int[] indices = node.getShardIndices();
SynonymDictionary dictionary = indexer.getSynonymDictionary(indices[0]);
if (clearBeforeAdding) {
dictionary.clear();
}
dictionary.addRange(new String[][] { group });
indexer.setDictionary(dictionary);
// Synonym addition logic
}
}
- group – Массив терминов, которые должны рассматриваться как эквиваленты.
- clearBeforeAdding – Установите
true, если хотите заменить существующие записи.
5. Добавление каталогов для индексирования
Укажите мастер‑узлу, какие папки содержат документы, которые нужно сделать доступными для поиска.
Indexer.addDirectory регистрирует папку для индексирования.
import com.groupdocs.search.scaling.*;
import com.groupdocs.search.examples.Utils;
public class AddDirectoriesForIndexing {
public static void run(SearchNetworkNode masterNode) {
String documentsPath = "YOUR_DOCUMENT_DIRECTORY/DocumentsPath";
IndexingDocuments.addDirectories(masterNode, documentsPath);
// Directory addition logic
}
}
Метод рекурсивно сканирует каталог и распределяет файлы по shard‑ам, поддерживая более 10 TB данных без загрузки целых файлов в память.
6. Выполнение текстового поиска в сети
Выполните запрос по всем узлам, при необходимости принудительно используя точное совпадение.
SearchEngine.search выполняет запрос в сети.
import com.groupdocs.search.scaling.*;
public class PerformTextSearch {
public static void run(SearchNetworkNode masterNode) {
String query = "tristique";
boolean exactMatchOnly = false;
TextSearchInNetwork.searchAll(masterNode, query, exactMatchOnly);
exactMatchOnly = true;
TextSearchInNetwork.searchAll(masterNode, query, exactMatchOnly);
// Search execution logic
}
}
Установите exactMatchOnly в true, когда требуется строгое совпадение терминов без стемминга, что может повысить точность в сценариях поиска кода до 20 %.
7. Закрытие узлов сети
Корректно освобождайте ресурсы после завершения обработки.
node.close() завершает работу SearchNode и освобождает ресурсы.
import com.groupdocs.search.scaling.*;
public class CloseNetworkNodes {
public static void run(SearchNetworkNode[] nodes) {
for (SearchNetworkNode node : nodes) {
node.close();
// Node closure logic
}
}
}
Практические применения
| Сценарий | Как сеть помогает |
|---|---|
| Enterprise Search | Распределяйте индексирование по серверам дата‑центров для корпусов данных в масштабе петабайт, достигая субсекундной задержки запросов для более 100 млн документов. |
| Document Management | Добавляйте синонимы в индекс, чтобы пользователи находили документы даже при различной терминологии, повышая полноту (recall) до 35 %. |
| E‑commerce Catalog | Разворачивайте региональные узлы для быстрого обслуживания локализованных поисков продуктов, сокращая среднее время отклика с 250 мс до 80 мс. |
| Content Management | Поддерживайте возможность поиска контента, пока редакторы добавляют новые файлы в определённые каталоги; сеть переиндексирует инкрементально без простоя. |
Распространённые проблемы и решения
- Port Conflicts – Убедитесь, что порт каждого узла (
basePort + index) свободен; при необходимости изменитеbasePort. - Synonym Not Applied – Проверьте, что вы вызвали
indexer.setDictionary(dictionary)после добавления терминов; иначе новые синонимы не будут учитываться при поиске. - Node Not Responding – Подпишитесь на события; ищите обратные вызовы
NodeFailedдля диагностики проблем сети. - Memory Leak on Close – Всегда вызывайте
node.close()для каждого развернутого узла; рассмотрите возможность использования блока try‑with‑resources для автоматической очистки.
Часто задаваемые вопросы
Q: Как развертывание нескольких узлов улучшает производительность поиска?
A: Каждый узел индексирует shard данных, позволяя параллельную обработку и снижая задержку запросов, поскольку нагрузка распределяется по кластеру.
Q: Можно ли добавить синонимы без переиндексации существующих документов?
A: Да, вы можете add synonyms to index во время выполнения через словарь синонимов; изменения вступают в силу сразу для новых запросов.
Q: Обязательно ли подписываться на события узлов?
A: Хотя это не требуется для базовой работы, подписка на события предоставляет видимость состояния узлов и помогает быстро реагировать на сбои.
Q: Каковы лучшие практики управления ресурсами узлов?
A: Регулярно закрывайте неиспользуемые узлы, контролируйте использование памяти JVM и переиспользуйте узлы в часы низкой нагрузки, чтобы поддерживать оптимальное потребление ресурсов.
Q: Поддерживает ли GroupDocs.Search форматы, не являющиеся текстовыми, такие как PDF или изображения?
A: Абсолютно. Библиотека извлекает текст из PDF, файлов Office и выполняет OCR изображений, делая их доступными для поиска сразу же.
Последнее обновление: 2026-07-16
Тестировано с: GroupDocs.Search 25.4 for Java
Автор: GroupDocs