Полнотекстовый поиск

Начиная с Jmix 3.1

Если приложение использует дополнение Search, динамические атрибуты можно индексировать для полнотекстового поиска. Определение динамической модели задает, по каким атрибутам выполняется поиск. Ни Java-определение индекса, ни повторное развёртывание не требуются.

Атрибуты для поиска

Чтобы индексировать атрибут, отметьте флажок Searchable в диалоге атрибута или задайте searchable: true в YAML:

- name: "Customer"
  attributes:
    - name: "taxId"
      javaClass: "java.lang.String"
      length: 20
      searchable: true
      messages:
        en: "Tax ID"

Для поиска можно отметить следующие атрибуты:

  • атрибуты типа java.lang.String;

  • атрибуты-перечисления;

  • одиночные ссылки. Ссылка индексируется по имени экземпляра связанной сущности, так же как статическая ссылка.

Вычисляемые атрибуты и атрибуты-коллекции нельзя отметить для поиска. Модель, в которой такой атрибут помечен как searchable, отклоняется.

Флажок Searchable отображается, только если в приложении есть дополнение Search. Если определение индекса в приложении уже индексирует атрибут, например с помощью шаблона *, флажок отмечен и доступен только для чтения.

Индексируемые сущности

Сущность, статическая или динамическая, индексируется, если хотя бы один из её динамических атрибутов отмечен для поиска или если в приложении есть Java-определение индекса для неё. Если есть и то и другое, атрибуты для поиска добавляются к Java-определению индекса, а поля, которые Java-определение уже индексирует, сохраняются.

При применении модели определения индексов обновляются, а схемы индексов синхронизируются в соответствии со свойством jmix.search.index-schema-management-strategy. Существующие строки автоматически повторно не индексируются. Чтобы добавить значения нового атрибута для поиска для существующих строк, выполните для сущности операцию enqueueIndexAll MBean EntityIndexing.

После этого индексирование работает так же, как для статических сущностей:

  • Создание, изменение и удаление экземпляра динамической сущности или изменение индексируемых динамических атрибутов статической сущности добавляет экземпляр в очередь индексации.

  • Если сущность, на которую указывает динамическая ссылка, изменяется или удаляется, ссылающиеся на неё сущности индексируются повторно.

Поиск

Динамические сущности находятся так же, как статические, с помощью компонента searchField и API поиска. В экране списка динамической сущности также можно использовать компонент fullTextFilter. Если результат поиска относится к сущности, у которой нет экрана деталей, при его открытии пользователь видит предупреждение.