Приложение 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>