Поиск по атрибуту 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");
Практические применения
- Document management systems – автоматически помечать файлы при загрузке, обеспечивая мгновенную навигацию по фасетам.
- Large content archives – комбинировать фильтры атрибутов с полнотекстовым поиском, сокращая время запроса с минут до секунд в коллекциях размером в несколько гигабайт.
- 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: Посетите официальную документацию или изучите форумы сообщества.
Ресурсы
- Документация: GroupDocs.Search for Java Docs
- Ссылка на API: API Reference
- Скачать: Latest Releases
- GitHub: GitHub GroupDocs.Search
- Бесплатный форум поддержки: GroupDocs Forums
- Временная лицензия: License Page
Последнее обновление: 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");