Как реализовать полнотекстовый поиск java с помощью GroupDocs.Search

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

Почему это важно: Индекс java full text search уменьшает задержку запросов, масштабируется с объёмом данных и предоставляет мощные полнотекстовые возможности для любого решения на Java — веб‑порталов, настольных приложений или облачных микросервисов.

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

  • Какова основная цель GroupDocs.Search? Он предоставляет масштабируемый java поисковый движок, который индексирует и ищет документы в распределённой сети.
  • Какую версию следует использовать? Рекомендуется использовать последнюю стабильную версию (например, 25.4) для новых проектов.
  • Нужна ли лицензия? Доступна 30‑дневная бесплатная пробная версия; для использования в продакшене требуется постоянная лицензия.
  • Можно ли добавить как отдельные файлы, так и целые каталоги? Да — используйте вспомогательные функции addFiles и addDirectories для загрузки контента.
  • Какая версия Java требуется? Java 8 или выше, с Maven для управления зависимостями.
  • Как работает индексация в реальном времени java? Подписавшись на события узла, вы можете автоматически переиндексировать файлы при их изменении.

Что такое «create searchable index java»?

Создание поискового индекса в Java означает построение структуры данных, которая сопоставляет термины с документами, их содержащими, обеспечивая быстрые полнотекстовые запросы. GroupDocs.Search for Java берёт на себя сложную работу, позволяя вам сосредоточиться на загрузке документов и настройке поведения поиска.

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

GroupDocs.Search предоставляет java поисковый движок, который масштабируется горизонтально, поддерживает более 50 форматов ввода и вывода, и предлагает индексацию, управляемую событиями. Развёртывание нескольких узлов распределяет нагрузку индексации, а встроенные проверки состояния обеспечивают надёжность сети. Он также предоставляет RESTful API и настраиваемые анализаторы для точной настройки релевантности.

Требования

  • JDK 8+ установлен на вашей машине разработки.
  • IDE, например IntelliJ IDEA или Eclipse.
  • Базовые знания Java и Maven.
  • Доступ к библиотеке GroupDocs.Search for Java (скачать или через Maven).

Настройка GroupDocs.Search for Java

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>

Подсказка: Следите за актуальностью номера версии, проверяя официальную страницу релизов.

Вы также можете скачать JAR напрямую с официального сайта: GroupDocs.Search for Java releases.

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

  • Бесплатная пробная версия: 30‑дневная оценка.
  • Временная лицензия: Запросить для расширенного тестирования.
  • Покупка: Требуется для продакшн‑развёртываний.

Базовая инициализация

Создайте объект конфигурации, указывающий папку, где будут храниться файлы индекса, и определяющий базовый порт связи:

import com.groupdocs.search.Configuration;

class InitializeSearch {
    public static void main(String[] args) {
        String basePath = "your/base/path";
        int basePort = 8080;
        
        Configuration config = new ConfiguringSearchNetwork().configure(basePath, basePort);
        // Use this configuration for subsequent operations
    }
}

Как создать searchable index java с помощью GroupDocs.Search?

Загрузите объект SearchConfiguration, запустите SearchNetworkNode и вызовите node.getIndexer().addFiles(...) для заполнения индекса. Этот однострочный шаблон запускает полностью функционирующую сеть java полнотекстового поиска, готовую принимать запросы сразу. Затем вы можете масштабировать её, добавляя дополнительные узлы, использующие тот же базовый путь и диапазон портов.

Функция 1 – настройка конфигурации и сети

Класс SearchConfiguration содержит все настройки, необходимые для запуска узла.

import com.groupdocs.search.Configuration;
import com.groupdocs.search.scaling.*;

class ConfiguringSearchNetwork {
    public static Configuration configure(String basePath, int basePort) {
        // Configure the search network with specified base path and port
        return new Configuration(basePath, basePort);
    }
}
  • basePath – Каталог, где будут сохраняться данные индекса.
  • basePort – Начальный порт; каждый узел будет увеличивать его значение.

Функция 2 – развертывание узлов поисковой сети

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

import com.groupdocs.search.scaling.*;

class SearchNetworkDeployment {
    public static SearchNetworkNode[] deploy(String basePath, int basePort, Configuration configuration) {
        // Deploy nodes based on the provided configuration
        return new SearchNetworkNode[]{new SearchNetworkNode()};
    }
}

SearchNetworkNode — это основной компонент времени выполнения, который хранит индекс, обрабатывает события добавления/удаления и отвечает на поисковые запросы. Развёртывание нескольких узлов позволяет вам create java full text search кластеры, масштабируемые горизонтально.

Функция 3 – подписка на события узла

Обновления в реальном времени поддерживают синхронизацию индекса с изменениями файловой системы.

import com.groupdocs.search.scaling.*;

class SearchNetworkNodeEvents {
    public static void subscribe(SearchNetworkNode node) {
        // Logic to subscribe to the specified node's events
    }
}

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

Функция 4 – добавление каталогов в узел сети

Используйте эту вспомогательную функцию для add directories to node, рекурсивно собирая все поддерживаемые документы.

import java.io.File;
import java.util.ArrayList;

class DirectoryAdder {
    public static void addDirectories(SearchNetworkNode node, String... directoryPaths) {
        ArrayList<String> files = new ArrayList<>();
        for (String directoryPath : directoryPaths) {
            final File folder = new File(directoryPath);
            listFiles(folder, files);
        }
        addFiles(node, files.toArray(new String[0]));
    }

    private static void listFiles(final File folder, ArrayList<String> list) {
        for (final File fileEntry : folder.listFiles()) {
            if (fileEntry.isDirectory()) {
                listFiles(fileEntry, list);
            } else {
                list.add(fileEntry.getPath());
            }
        }
    }
}

Функция 5 – добавление файлов в узел сети

Когда требуется более тонкий контроль, add files to search по отдельности:

import com.groupdocs.search.Document;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import org.apache.commons.io.FilenameUtils;
import com.groupdocs.search.Indexer;
import com.groupdocs.search.options.*;

class FileAdder {
    public static void addFiles(SearchNetworkNode node, String... filePaths) {
        try {
            InputStream[] streams = new FileInputStream[filePaths.length];
            Document[] documents = new Document[filePaths.length];
            for (int i = 0; i < filePaths.length; i++) {
                String filePath = filePaths[i];
                InputStream stream = new FileInputStream(filePath);
                streams[i] = stream;
                
                // Create a document from the input stream
                String fileName = FilenameUtils.getName(filePath);
                String extension = "." + FilenameUtils.getExtension(filePath);
                Document document = Document.createFromStream(
                    fileName,
                    new Date(),
                    extension,
                    stream);
                documents[i] = document;
            }

            // Initialize the indexer and configure options
            Indexer indexer = node.getIndexer();
            IndexingOptions options = new IndexingOptions();
            options.setUseRawTextExtraction(false);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Общие сценарии использования

  • Корпоративные порталы документов, которым нужен мгновенный поиск по тысячам PDF и файлов Office.
  • Платформы юридического e‑discovery, где новые доказательства постоянно добавляются и должны быть доступны для поиска в реальном времени.
  • Системы управления контентом, хранящие изображения, презентации и таблицы и требующие полнотекстового поиска.

Распространённые проблемы и решения

ПроблемаПричинаРешение
В результатах поиска не отображаются документыИндекс не зафиксированВызовите node.getIndexer().commit() после добавления файлов.
Ошибка конфликта портаДругой сервис использует basePortВыберите другой basePort или проверьте свободные порты.
Неподдерживаемый формат файлаВ библиотеке отсутствует парсерУбедитесь, что расширение файла поддерживается, или добавьте пользовательский извлекатель.

Советы по устранению неполадок

  • Проверьте состояние узла: Используйте встроенный эндпоинт проверки здоровья (http://localhost:{port}/health), чтобы убедиться, что каждый узел работает.
  • Отслеживайте использование памяти: Большие партии документов могут вызвать всплеск памяти; индексируйте небольшими порциями и периодически вызывайте commit().
  • Проверьте логи: GroupDocs.Search записывает подробные логи в папку basePath — просмотрите их на предмет ошибок парсинга или тайм‑аутов сети.

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

В: Можно ли использовать GroupDocs.Search в облачном Java‑приложении?
О: Да. Библиотека работает с любой Java‑средой, и вы можете указать basePath на сетевой смонтированный каталог или монтирование облачного хранилища.

В: Как обновить индекс, когда файл изменяется?
О: Подпишитесь на события узла (см. Функцию 3) и снова вызовите addFiles или addDirectories для изменённых путей.

В: Есть ли ограничение на количество узлов, которые можно развернуть?
О: Практически ограничение определяется вашим оборудованием и пропускной способностью сети. API не накладывает жёсткого лимита.

В: Нужно ли перезапускать узлы после добавления новых файлов?
О: Нет. Добавление файлов автоматически запускает индексацию; необходимо лишь выполнить commit, если вы откладываете операцию.

В: Какие форматы документов поддерживаются из коробки?
О: PDF, DOC/DOCX, XLS/XLSX, PPT/PPTX, TXT, HTML и многие типы изображений — более 50 форматов в общей сложности.

В: Как включить индексацию в реальном времени java для папки, которая постоянно получает загрузки?
О: Реализуйте наблюдатель за файловой системой (например, java.nio.file.WatchService), который вызывает DirectoryAdder.addDirectories(node, path) каждый раз, когда обнаруживается новый файл.


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

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