3.4. Поиск по содержимому загруженных файлов

Теперь добавим функциональность загрузки файлов для каждой публикации и их отображение на экране списка сущности BookPublication.

Для начала внесите изменения в BookPublication. Добавьте новый атрибут file, который будет являться ссылкой на сущность FileDescriptor с отношением много-к-одному. FileDescriptor – это описатель загруженного файла (не путать с java.io.FileDescriptor), позволяющий ссылаться на файл из объектов модели данных.

book publication new attribute

После сохранения изменений добавьте новый атрибут к существующему представлению bookPublication.full. Также следует добавить атрибут на экраны просмотра списка и редактирования сущности BookPublication. Для этого поместите курсор на строку, в которой описан атрибут, и нажмите Alt+Enter. Выберите Add entity attribute to screens и в появившемся окне выберите экраны, на которые нужно добавить новый атрибут.

Сгенерируйте новые скрипты обновления БД, выполните команду обновления базы данных и перезапустите сервер приложения. При пересоздании базы данных полнотекстовый поиск по умолчанию отключается. Снова включите флажок Value для атрибута Enable в экране JMX Console, выполните индексацию всех файлов, выйдите из системы снова выполните логин.

Так как мы добавили новый атрибут, в таблице публикаций на экране списка сущности BookPublication теперь появился новый пустой столбец: File. Чтобы его заполнить, откройте экран редактирования строки таблицы, с помощью нового поля File загрузите текстовый файл в систему и нажмите OK. По умолчанию CUBA поддерживает следующие форматы файлов: RTF, TXT, DOC, DOCX, XLS, XSLX, ODT, ODS и PDF.

book publication file is not

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

book publication files uploaded

Чтобы переиндексировать имеющиеся в базе данных сущности и файлы в соответствии с новой конфигурацией поиска, откройте в экране JMX Console JMX-бин app-core.fts:type=FtsManager и вызовите последовательно сначала метод reindexAll(), а затем processQueue(). Все вновь добавляемые и изменяемые данные будут индексироваться автоматически, с задержкой, определяемой интервалом вызова назначенного задания, т.е. не более 30 секунд.

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

book publication fts result

Более подробную информацию о FileStorageAPI и FileDescriptor ищите в соответствующих разделах основного руководства.