Приложение A: Файл конфигурации FTS
Файл конфигурации полнотекстового поиска представляет собой XML-файл, как правило, располагающийся в каталоге src модуля core и содержащий описание индексируемых сущностей и их атрибутов.
Файл конфигурации FTS задается в свойстве приложения cuba.ftsConfig.
Рассмотрим структуру файла.
fts-config – корневой элемент.
Элементы fts-config:
-  
entities– список сущностей, подлежащих индексированию и поиску.Элементы
entities:-  
entity– описание индексируемой сущности.Атрибуты
entity:-  
class– Java класс сущности. -  
show– должна ли данная сущность показываться в результатах поиска самостоятельно. Значениеfalseиспользуется для сущностей-связей, которые не интересны пользователю сами по себе, но нужны, например, для связи загруженных файлов и сущностей предметной области. По умолчаниюtrue. 
Элементы
entity:-  
include– включить атрибут или несколько атрибутов сущности в индекс.Атрибуты
include:-  
re– регулярное выражение для отбора атрибутов по имени. -  
name– имя атрибута. Может быть путем (через точку) по ссылочным атрибутам. Тип не проверяется, однако если имя является путем, то возможны два случая:-  
Конечный атрибут должен быть сущностью (не embeddable), а не простым типом (атрибут простого типа не имеет здесь смысла, он должен индексироваться в своей сущности).
 -  
Конечный атрибут должен быть простым типом встраиваемой (embeddable) сущности. Например, если индексируемая сущность имеет поле
addressтипаAddress(embeddable сущность), то имя атрибута в файле конфигурации fts должно бытьaddress.cityилиaddress.street, а не простоaddress. 
 -  
 
 -  
 
 -  
 
 -  
 -  
exclude– исключить ранее включенный атрибут. Возможные атрибуты такие же, как в элементеinclude. -  
searchables– Groovy-скрипт для добавления в очередь на индексирование произвольных сущностей, связанных с измененной.Например, когда изменяется (добавляется, удаляется) экземпляр
CardAttachment, мы должны также переиндексировать связанный с ним экземплярCard, так как сам собойCardв очередь не встанет, ибо не менялся.При запуске в скрипт передаются следующие переменные:
-  
searchables– список сущностей, который нужно пополнять. -  
entity– текущий экземпляр сущности, помещаемый в очередь автоматически. 
Пример скрипта:
<entity class="com.haulmont.workflow.core.entity.CardAttachment" show="false"> ... <searchables> searchables.add(entity.card) </searchables> </entity> -  
 -  
searchableIf– Groovy-скрипт для ограничения помещения в очередь некоторых экземпляров индексируемой сущности.Например, может быть, не нужно индексировать старые версии документов.
При запуске в скрипт передается переменная
entity– текущий экземпляр сущности. Скрипт возвращает булевское значение:true, для того чтобы индексировать текущий экземпляр,false, чтобы игнорировать его.Пример скрипта:
<entity class="com.haulmont.docflow.core.entity.Contract"> ... <searchableIf> entity.versionOf == null </searchableIf> </entity> 
Пример файла конфигурации FTS:
<fts-config>
    <entities>
        <entity class="com.sample.library.entity.Author">
            <include re=".*"/>
        </entity>
        <entity class="com.sample.library.entity.Book">
            <include re=".*"/>
        </entity>
        <entity class="com.sample.library.entity.BookInstance">
            <include re=".*"/>
        </entity>
        <entity class="com.sample.library.entity.BookPublication">
            <include re=".*"/>
        </entity>
        <entity class="com.sample.library.entity.Publisher">
            <include re=".*"/>
        </entity>
        <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>