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

Для иллюстрации возможностей поиска по содержимому загруженных файлов необходимо сначала подключить базовый проект workflow, добавить в проект сущность EBook, создать и пройти процесс сканирования книги, как это описано в руководстве Подсистема Workflow (см. раздел Дополнительные материалы). Далее в данном разделе предполагается, что в приложении создан экземпляр EBook и в результате выполнения процесса Book scanning загружен соответствующий файл с оригиналом книги.

Добавьте в файл fts.xml проекта следующие элементы:

...
        <entity class="com.sample.library.entity.EBook">
            <include name="publication.book"/>
            <include name="attachments.file"/>
        </entity>

        <entity class="com.haulmont.workflow.core.entity.CardAttachment" show="false">
            <include re=".*"/>
            <exclude name="card"/>

            <searchables>
                searchables.add(entity.card)
            </searchables>
        </entity>

    </entities>
</fts-config>

Для правильного отображения экземпляров EBook в экране результатов поиска добавьте классу EBook аннотацию @NamePattern:

@NamePattern("%s|publication")
public class EBook extends Card {
...

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

В результате, при наличии в базе данных книги с названием Alice’s Adventures и загруженным оригиналом в формате PDF, результаты поиска строки "alice" выглядят следующим образом:

SearchResults2

а результаты поиска строки "rabbit" так:

SearchResults3