Поиск по атрибуту java с руководством GroupDocs.Search

В современных приложениях, ориентированных на документы, часто требуется находить файлы не только по их текстовому содержимому, но и по пользовательским метаданным, таким как отдел, уровень конфиденциальности или дата создания. Search by attribute java предоставляет эту возможность в одном высокопроизводительном запросе. В этом руководстве вы увидите, как пакетно обновлять атрибуты у уже проиндексированных файлов, внедрять атрибуты во время индексации и эффективно выполнять запросы к документам по метаданным с использованием библиотеки GroupDocs.Search for Java.

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

  • What is “search by attribute java”? Это позволяет фильтровать результаты поиска с помощью метаданных в виде пар ключ‑значение, прикреплённых к каждому проиндексированному документу.
  • Can I modify attributes after indexing? Да — используйте AttributeChangeBatch для применения массовых изменений без перестроения всего индекса.
  • How do I add attributes while indexing? Зарегистрируйте обработчик события FileIndexing и программно задавайте атрибуты для каждого файла.
  • Do I need a license? Бесплатная пробная версия подходит для оценки; постоянная лицензия требуется для продакшн‑развертываний.
  • Which Java version is required? Рекомендуется Java 8 или новее.

Что такое “search by attribute java”?

Search by attribute java позволяет выполнять запросы к документам на основе пользовательских метаданных (атрибутов), а не только их текстового содержания. Такой подход значительно сужает набор результатов, уменьшает сетевой трафик и ускоряет время отклика, поскольку движок оценивает фильтры атрибутов до выполнения полнотекстового сканирования.

Почему использовать динамическое тегирование метаданных?

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

  • Dynamic categorization – поддерживайте метаданные в синхронизации с меняющимися бизнес‑правилами.
  • Faster filtering – фильтры атрибутов оцениваются до полнотекстового поиска, ускоряя время отклика.
  • Compliance tracking – помечайте документы в соответствии с политиками хранения или требованиями аудита.
  • Batch update attributes – изменяйте множество документов одной операцией без полной переиндексации.

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

  • Java 8+ (JDK 8 или новее)
  • GroupDocs.Search for Java library (см. настройку Maven ниже)
  • Базовое знакомство с коллекциями Java и обработкой исключений

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

Настройка Maven

Добавьте репозиторий GroupDocs и зависимость в ваш pom.xml:

<repositories>
    <repository>
        <id>groupdocs-releases</id>
        <url>https://repo.groupdocs.com/maven</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>com.groupdocs</groupId>
        <artifactId>groupdocs-search</artifactId>
        <version>25.4</version>
    </dependency>
</dependencies>

Прямое скачивание

В качестве альтернативы загрузите последнюю версию с GroupDocs.Search for Java releases. Если вы предпочитаете не использовать Maven, скачайте JAR с веб‑сайта GroupDocs.

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

  • Начните с бесплатной пробной версии, чтобы изучить возможности.
  • Для длительного использования получите временную или полную лицензию через страницу лицензий.

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

// Initialize the search index folder
String indexFolder = "C:/search_index";
Index index = new Index(indexFolder);

// Apply license if you have one
License license = new License();
license.setLicense("C:/licenses/groupdocs.lic");

Как изменить атрибуты документов (пакетное обновление)

Чтобы изменить атрибуты документов после их индексации, можно использовать API AttributeChangeBatch для применения массовых обновлений. Этот подход обновляет метаданные выбранных файлов в одной транзакции, избегая накладных расходов на переиндексацию всей коллекции и сохраняя полнотекстовый индекс нетронутым.

Direct answer: Используйте AttributeChangeBatch для группировки добавлений, удалений или замен метаданных в одну атомарную операцию, затем зафиксируйте пакет в индексе. Это обновляет атрибуты множества документов за один проход, сохраняя существующий полнотекстовый индекс.

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

index.add("C:/docs/contract1.pdf");
index.add("C:/docs/report2.docx");

Шаг 2: получить информацию о проиндексированных документах

DocumentInfo info = index.getDocumentInfo("contract1.pdf");
System.out.println("Current attributes: " + info.getAttributes());

Шаг 3: пакетное обновление атрибутов документов

Класс AttributeChangeBatch группирует несколько изменений атрибутов в одну атомарную операцию, уменьшая нагрузку ввода‑вывода и обеспечивая согласованность индекса.

AttributeChangeBatch batch = new AttributeChangeBatch();
batch.addAttribute("contract1.pdf", "department", "Legal");
batch.removeAttribute("report2.docx", "confidential");
batch.replaceAttribute("report2.docx", "status", "archived", "active");
index.applyAttributeChanges(batch);

Шаг 4: поиск с фильтрами по атрибутам

SearchOptions options = new SearchOptions();
options.addAttributeFilter("department", "Legal");
SearchResult result = index.search("agreement", options);
System.out.println("Found " + result.getCount() + " legal documents.");

Как добавить атрибуты во время индексации

Добавление атрибутов во время процесса индексации гарантирует, что каждый документ будет обогащён необходимыми метаданными с самого начала. Обрабатывая событие FileIndexing, вы можете программно прикреплять пары ключ‑значение к каждому объекту DocumentInfo до того, как движок обработает файл, обеспечивая постоянную доступность атрибутов для последующих поисков.

Direct answer: Подпишитесь на событие FileIndexing перед добавлением файлов; в обработчике события вызовите addAttribute у объекта DocumentInfo, чтобы прикрепить пары ключ‑значение, затем позвольте индексу продолжить обработку файла.

Шаг 1: подписаться на событие FileIndexing

Событие FileIndexing срабатывает для каждого файла при его добавлении в индекс, позволяя внедрять пользовательские метаданные.

index.getEvents().FileIndexing.add(event -> {
    // Example: set department based on folder name
    String folder = new File(event.getFilePath()).getParentFile().getName();
    event.getDocumentInfo().addAttribute("department", folder);
});

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

index.add("C:/incoming/hr/policy.pdf");
index.add("C:/incoming/finance/budget.xlsx");

Практические применения

  1. Document management systems – автоматически помечать файлы при загрузке, обеспечивая мгновенную навигацию по фасетам.
  2. Large content archives – комбинировать фильтры атрибутов с полнотекстовым поиском, сокращая время запроса с минут до секунд в коллекциях размером в несколько гигабайт.
  3. Compliance & reporting – динамически назначать периоды хранения, уровни конфиденциальности или флаги аудита, которые можно использовать в запросах для проверки соответствия нормативам.

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

  • Memory management – контролируйте кучу JVM и настраивайте -Xmx (например, -Xmx4g для индексов более 2 GB).
  • Batch processing – группируйте изменения атрибутов с помощью AttributeChangeBatch для минимизации записей на диск; разбивайте пакеты более 10 000 изменений, чтобы избежать тайм‑аутов транзакций.
  • Library updates – используйте последнюю версию GroupDocs.Search; версия 25.4 добавляет ускорение на 30 % оценки фильтров атрибутов по сравнению с 24.x.

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

| Attributes not applied | Обработчик события не зарегистрирован до индексации | Убедитесь, что index.getEvents().FileIndexing.add(...) вызывается до любых вызовов index.add(...). | | Search returns no results | Несоответствие имени атрибута (чувствительно к регистру) | Используйте точные имена атрибутов при создании фильтров (createAttribute("main")). | | Out‑of‑memory errors on large batches | Слишком много изменений в одном пакете | Разделите большие обновления на более мелкие экземпляры AttributeChangeBatch (например, 5 000 документов на пакет). | | License not recognized | Использование пробного JAR без применения файла лицензии | Вызовите License license = new License(); license.setLicense("path/to/license.file"); перед любой операцией с индексом. |

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

Q: Какие предварительные требования для использования GroupDocs.Search в Java?
A: Java 8+, библиотека GroupDocs.Search и базовые знания концепций индексации.

Q: Как установить GroupDocs.Search через Maven?
A: Добавьте репозиторий и зависимость, показанные в разделе настройки Maven, в ваш pom.xml.

Q: Можно ли изменить атрибуты после индексации документов?
A: Да, используйте AttributeChangeBatch для пакетного обновления атрибутов документов без переиндексации.

Q: Что делать, если процесс индексации медленный?
A: Оптимизируйте память JVM (-Xmx), используйте пакетные обновления и обновитесь до последней версии библиотеки для получения исправлений производительности.

Q: Где можно найти дополнительные ресурсы по GroupDocs.Search для Java?
A: Посетите официальную документацию или изучите форумы сообщества.

Ресурсы


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

<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>
import com.groupdocs.search.Index;

// Initialize an index in a specified directory
Index index = new Index("YOUR_OUTPUT_DIRECTORY/ChangeAttributes");
index.add("YOUR_DOCUMENT_DIRECTORY");
import com.groupdocs.search.results.DocumentInfo;

DocumentInfo[] documents = index.getIndexedDocuments();
import com.groupdocs.search.common.AttributeChangeBatch;
import com.groupdocs.search.SearchOptions;

AttributeChangeBatch batch = new AttributeChangeBatch();
batch.addToAll("public"); // Add 'public' to all documents
batch.remove(documents[0].getFilePath(), "public"); // Remove 'public' from a specific document
batch.add(documents[0].getFilePath(), "main", "key"); // Add 'main' and 'key' attributes

// Apply changes
index.changeAttributes(batch);
import com.groupdocs.search.results.SearchResult;

SearchOptions options = new SearchOptions();
options.setSearchDocumentFilter(SearchDocumentFilter.createAttribute("main"));
String query = "length";
SearchResult result = index.search(query, options); // Perform the search
import com.groupdocs.search.events.EventHandler;
import com.groupdocs.search.events.FileIndexingEventArgs;

index.getEvents().FileIndexing.add(new EventHandler<FileIndexingEventArgs>() {
    @Override
    public void invoke(Object sender, FileIndexingEventArgs args) {
        if (args.getDocumentFullPath().endsWith("SampleDocument.pdf")) {
            args.setAttributes(new String[] { "main", "key" });
        }
    }
});
index.add("YOUR_DOCUMENT_DIRECTORY");

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