Освоение эффективного поиска документов с GroupDocs.Search для Java

Finding the right passage inside thousands of PDFs, Word files, or spreadsheets can feel like searching for a needle in a haystack. How to create index quickly and retrieve that needle is what makes a document‑search solution valuable. In this tutorial you’ll learn how to use GroupDocs.Search for Java, a high‑performance java search library, to create index, add documents to index, and extract text from documents in multiple formats such as files, streams, strings, and structured data. By the end you’ll have a production‑ready indexing pipeline that scales to large document collections while keeping memory usage low.

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

  • Какова основная цель? To how to create index and retrieve document content instantly.
  • Какую библиотеку следует использовать? The GroupDocs.Search for Java java search library.
  • Могу ли я вывести текст в файл? Yes – the library provides output text to file adapters for HTML, plain text, and more.
  • Поддерживается ли структурированное извлечение? Absolutely – use the structured text extraction adapter to get field‑level data.
  • Нужна ли лицензия? A trial license works for development; a permanent license is required for production deployments.

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

  • Как how to create index и add documents to index с помощью GroupDocs.Search for Java.
  • Техники для output text to file, потоков, строк и структурированных форматов.
  • Советы по оптимизации производительности, позволяющие сохранять индексацию быстрой и экономящей память.
  • Реальные сценарии, где эти возможности проявляют себя, такие как репозитории юридических контрактов и архивы академических статей.

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

GroupDocs.Search поддерживает более 50 форматов ввода и вывода — включая DOCX, XLSX, PPTX, PDF, HTML и распространённые типы изображений — и может индексировать многогигабайтные файлы без загрузки всего файла в память. Тесты показывают, что коллекцию документов объёмом 1 ГБ можно проиндексировать менее чем за 2 минуты на стандартном 8‑ядерном сервере, а запросы поиска возвращают результаты менее чем за 100 мс.

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

  • Java Development Kit (JDK) 8 или новее.
  • GroupDocs.Search for Java library (trial or licensed).
  • Maven для управления зависимостями.
  • Базовые знания Java I/O.

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

Сначала добавьте репозиторий Maven GroupDocs.Search и зависимость в ваш pom.xml. Этот шаг гарантирует, что библиотека будет доступна в classpath.

Maven Setup
Добавьте следующие конфигурации репозитория и зависимости в ваш файл 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 for Java releases.

License Acquisition
Чтобы использовать GroupDocs.Search в продакшене, получите пробную или постоянную лицензию на официальном сайте. Пробная лицензия не ограничена для разработки и тестирования.

Как создать индекс Java с пользовательскими настройками

Index — это основной класс, представляющий поисковую коллекцию документов.
IndexSettings настраивает параметры, такие как сжатие индекса.
CompressionLevel определяет степень сжатия применяемого к сохранённому тексту.

Загрузите объект Index с включённым сжатием, укажите папку и добавьте все поддерживаемые файлы. Этот прямой ответ объясняет, что именно нужно сделать: создать Index с помощью new Index("indexFolder", new IndexSettings().setCompressionLevel(CompressionLevel.High)), затем вызвать index.add("documentsFolder", true), чтобы рекурсивно проиндексировать каждый поддерживаемый файл. Режим высокого сжатия уменьшает размер на диске до 70 % при сохранении высокой скорости поиска.

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

Создание индекса и индексация документов

Обзор

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

import com.groupdocs.search.*;
import java.io.ByteArrayOutputStream;

public class FeatureIndexCreation {
    public static void main(String[] args) {
        // Define the folder paths for indexing
        String indexFolder = YOUR_DOCUMENT_DIRECTORY + "/OutputAdapters/Index";
        String documentsFolder = YOUR_DOCUMENT_DIRECTORY + "/DocumentsPath";  // Adjust as needed

        // Creating an index settings instance with compression enabled
        IndexSettings settings = new IndexSettings();
        settings.setTextStorageSettings(new TextStorageSettings(Compression.High));

        // Creating the index in the specified folder
        Index index = new Index(indexFolder, settings);

        // Adding documents from the specified folder to the index
        index.add(documentsFolder);
    }
}

Explanation

  • Index Settings: Мы включаем high compression для хранения текста, оптимизируя использование дискового пространства без ущерба для скорости запросов.
  • Adding Documents: Метод index.add() adds documents to index, сканируя папку рекурсивно и автоматически обрабатывая все поддерживаемые форматы.

Как вывести текст в файл, поток, строку и структурированные форматы

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

Вывод текста документа в файл

FileOutputAdapter записывает извлечённый текст документа в файл в выбранном формате.

Обзор

FileOutputAdapter записывает извлечённый текст в выбранном формате (HTML, простой текст и т.д.) непосредственно в файл на диске. Это полезно для создания человекочитаемых отчётов или передачи данных в последующие конвейеры обработки.

import com.groupdocs.search.*;

public class FeatureOutputToFile {
    public static void main(String[] args) {
        String indexFolder = YOUR_DOCUMENT_DIRECTORY + "/OutputAdapters/Index";
        Index index = new Index(indexFolder);

        // Assuming documents are already indexed, retrieve the first document
        DocumentInfo[] documents = index.getIndexedDocuments();
        if (documents.length > 0) {
            DocumentInfo document = documents[0];

            // Output document text to an HTML file
            FileOutputAdapter fileOutputAdapter = new FileOutputAdapter(OutputFormat.Html, YOUR_OUTPUT_DIRECTORY + "/Text.html");
            index.getDocumentText(document, fileOutputAdapter);
        }
    }
}
  • FileOutputAdapter: Преобразует текст проиндексированного документа в HTML и записывает его по указанному пути файла, сохраняя базовое форматирование, такое как заголовки и таблицы.

Вывод текста документа в поток

StreamOutputAdapter передаёт извлечённый текст документа в ByteArrayOutputStream без создания временного файла.

Обзор

Когда вам нужен контент только временно — например, для отправки по HTTP или встраивания в веб‑ответ — используйте StreamOutputAdapter. Он передаёт текст в ByteArrayOutputStream, избегая накладных расходов на создание временного файла.

import com.groupdocs.search.*;
import java.io.ByteArrayOutputStream;

public class FeatureOutputToStream {
    public static void main(String[] args) {
        String indexFolder = YOUR_DOCUMENT_DIRECTORY + "/OutputAdapters/Index";
        Index index = new Index(indexFolder);

        // Assuming documents are already indexed, retrieve the first document
        DocumentInfo[] documents = index.getIndexedDocuments();
        if (documents.length > 0) {
            DocumentInfo document = documents[0];

            // Output document text to a stream in HTML format
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            StreamOutputAdapter streamOutputAdapter = new StreamOutputAdapter(OutputFormat.Html, stream);
            index.getDocumentText(document, streamOutputAdapter);
        }
    }
}
  • StreamOutputAdapter: Передаёт текст документа в ByteArrayOutputStream, позволяя гибко обрабатывать данные без обращения к файловой системе.

Вывод текста документа в строку

StringOutputAdapter захватывает весь текст документа в один объект String.

Обзор

Для быстрого логирования, отладки или отображения в UI StringOutputAdapter захватывает весь текст документа в один объект String.

import com.groupdocs.search.*;

public class FeatureOutputToString {
    public static void main(String[] args) {
        String indexFolder = YOUR_DOCUMENT_DIRECTORY + "/OutputAdapters/Index";
        Index index = new Index(indexFolder);

        // Assuming documents are already indexed, retrieve the first document
        DocumentInfo[] documents = index.getIndexedDocuments();
        if (documents.length > 0) {
            DocumentInfo document = documents[0];

            // Output document text to a string in HTML format
            StringOutputAdapter stringOutputAdapter = new StringOutputAdapter(OutputFormat.Html);
            index.getDocumentText(document, stringOutputAdapter);
            String result = stringOutputAdapter.getResult();
        }
    }
}
  • StringOutputAdapter: Захватывает текст документа в String, упрощая его вставку в логи, вывод консоли или UI‑компоненты.

Вывод текста документа в структурированный формат

StructuredOutputAdapter возвращает богатую объектную модель, содержащую абзацы, таблицы и пользовательские метаданные.

Обзор

StructuredOutputAdapter возвращает богатую объектную модель, содержащую абзацы, таблицы и пользовательские метаданные. Этот формат идеален для последующих конвейеров обработки естественного языка (NLP) или извлечения данных.

import com.groupdocs.search.*;

public class FeatureOutputToStructure {
    public static void main(String[] args) {
        String indexFolder = YOUR_DOCUMENT_DIRECTORY + "/OutputAdapters/Index";
        Index index = new Index(indexFolder);

        // Assuming documents are already indexed, retrieve the first document
        DocumentInfo[] documents = index.getIndexedDocuments();
        if (documents.length > 0) {
            DocumentInfo document = documents[0];

            // Output document text to a structured format like PlainText
            StructuredOutputAdapter structuredOutputAdapter = new StructuredOutputAdapter(OutputFormat.PlainText);
            index.getDocumentText(document, structuredOutputAdapter);
        }
    }
}
  • StructuredOutputAdapter: Извлекает текст документа в формат structured text extraction, позволяя проводить детальный анализ, извлечение полей и интеграцию с конвейерами машинного обучения.

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

ПроблемаПричинаРешение
Индекс не созданНеправильный путь к папке или отсутствие прав на записьVerify indexFolder exists and the application has write access
Документы не возвращаютсяindex.add() не вызван или указана неверная исходная папкаEnsure documentsFolder points to the correct directory and contains supported file types
Файл вывода пустНедействительный путь адаптера вывода или отсутствуют каталогиCreate the target directory (YOUR_OUTPUT_DIRECTORY) before running
Пики памяти при больших файлахЗагрузка всего файла в памятьUse StreamOutputAdapter to process data incrementally

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

Q: Можно ли использовать GroupDocs.Search с другими JVM‑языками, такими как Kotlin или Scala?
A: Да, библиотека написана полностью на Java и без проблем работает с любым JVM‑языком.

Q: Как сжатие влияет на скорость поиска?
A: Высокое сжатие уменьшает использование диска до 70 % и добавляет лишь минимальную нагрузку на CPU во время индексации; задержка запросов остаётся менее 100 мс для типовых нагрузок.

Q: Можно ли обновить существующий индекс без его полной перестройки?
A: Абсолютно. Используйте index.add() для новых файлов и index.remove() для удаления устаревших, что позволяет выполнять инкрементные обновления.

Q: Какой формат вывода лучше всего подходит для конвейеров обработки естественного языка?
A: PlainText результат из адаптера structured text extraction предоставляет чистый, независимый от языка контент, идеальный для задач NLP.

Q: Нужна ли лицензия для разработки и тестирования?
A: Бесплатная пробная лицензия достаточна для разработки и оценки; для продакшн‑развёртываний требуется приобретённая лицензия.

Заключение

Теперь у вас есть полный, готовый к продакшну рабочий процесс для how to create index, добавления документов и извлечения их текста во всех необходимых форматах. Начните с настройки Index с включённым сжатием, добавьте свою коллекцию документов и выберите подходящий адаптер вывода для вашего сценария — будь то генерация HTML‑отчётов, передача данных в NLP‑модель или потоковая передача контента веб‑клиенту. Поэкспериментируйте с API инкрементных обновлений, чтобы поддерживать индекс актуальным без дорогих перестроек, и вы получите быстрый, надёжный поиск по любой репозитории документов.


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

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