Начало работы с поиском

Это руководство предоставляет инструкции по инициализации функциональности поиска в вашем приложении.

Предположим, вы хотите добавить несколько сущностей в ваше приложение и включить поиск по их атрибутам.

Для начала выполните следующие шаги:

  1. Включите Search в ваш проект, следуя рекомендациям в разделе установка.

  2. Настройте подключение в зависимости от местоположения сервиса.

Создание модели данных и экранов

Давайте создадим перечисленные ниже классы:

  1. Перечисление Status со значениями SILVER и GOLD.

  2. Сущность Customer с полями:

    • firstName типа String

    • lastName типа String

    • status типа Status

    • card типа FileRef

  3. Сущность Order с полями:

    • date типа Date

    • number типа String

    • amount типа Integer

    • product типа String

    • customer связь с Customer, кардинальность "многие-к-одному"

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

Создайте экраны деталей и списка для сущностей Customer и Order.

Создание интерфейса определения индекса

Далее необходимо создать определение индекса (Index Definition) - интерфейс, описывающий, какие сущности и атрибуты должны индексироваться. Предположим, мы намерены искать заказы по их номеру, названию продукта, статусу клиента или фамилии клиента. В рамках определения индекса мы определим метод для указания требуемых атрибутов.

@JmixEntitySearchIndex(entity = Order.class)
public interface OrderIndexDefinition {

    @AutoMappedField(includeProperties =
            {"number", "product", "customer.status", "customer.lastName"})
    void orderMapping();
}
  1. Интерфейс должен быть аннотирован @JmixEntitySearchIndex с обязательным параметром entity.

  2. Интерфейс может быть назван произвольно.

  3. Аннотация @AutoMappedField автоматически сопоставляет запрошенные свойства. Здесь мы используем параметр includeProperties, чтобы указать атрибуты для индексации.

  4. Метод может быть назван по вашему усмотрению.

Настройка именования индексов

По умолчанию имя индекса формируется как <prefix><entity_name>. Префикс по умолчанию - search_index_.

Поскольку вы можете использовать один и тот же сервис Elasticsearch/OpenSearch в нескольких проектах, рекомендуется настроить префикс по умолчанию для уникальных имен индексов. Чтобы внести это изменение, добавьте следующее свойство в ваш файл application.properties:

jmix.search.search-index-name-prefix = demo_prefix_

В качестве альтернативного способа вы можете указать полное имя индекса в атрибуте indexName аннотации @JmixEntitySearchIndex.

Настройка обработки очереди индексации

Приложение Jmix отслеживает изменения данных, но не синхронизирует их автоматически с сервисом поисковой системы. Чтобы обеспечить регулярное обновление индексов, просто добавьте в проект дополнение Quartz. Дополнение Search будет использовать Quartz для плановой обработки очереди индексации, используя конфигурации по умолчанию.

Создание экрана поиска

  1. Создайте пустой экран с именем Search, используя шаблон Studio Blank view.

  2. Нажмите Add Component на панели действий, найдите элемент SearchField и дважды щелкните по нему.

  3. Новый элемент searchField появится как на панели структуры Jmix UI, так и в XML. Вы можете настраивать атрибуты, такие как id, height, width и т.д., так же, как это делается для других UI-компонентов.

    <search:searchField id="searchField"/>

Теперь экран включает текстовое поле для ввода поискового запроса и кнопку для выполнения поиска.

Тестирование поиска в приложении

Теперь мы готовы запустить и протестировать приложение.

Сначала добавьте несколько экземпляров сущностей Customer и Order.

Перейдите на экран Search, чтобы найти клиентов со статусом Silver.

Результаты поиска появятся на экране Search results.

search result

Щелчок по результату перенаправит вас на экран деталей сущности.