@startuml mainframe api/v1/products Общая схема Actor user participant BackendSite participant Sherlock Database ElasticSearch user -> BackendSite: Вводит запрос в поисковую строку BackendSite -> BackendSite: Обработка запроса на бэкенде\n сайта и формирование запроса\nдля Sherlock BackendSite -> Sherlock: REST POST api/v1/products Sherlock -> Sherlock: Перевод запроса\nна второй язык Sherlock -> Sherlock: Преобразование запроса\n в структуру и формирование\nзапроса для ElasticSearch note over Sherlock Отправка запроса в ElasticSearch с доп сортировкой по категориям из Спектра endnote alt ElasticSearch ничего не вернул Sherlock -> ElasticSearch: REST GET products/_search RU Sherlock -> ElasticSearch: REST GET products/_search EN ElasticSearch --> Sherlock: Получен пустой ответ note over Sherlock Отправляется доп.запрос в ElasticSearch с меньшим процентом вхождения endnote Sherlock -> ElasticSearch: REST GET products/_search RU Sherlock -> ElasticSearch: REST GET products/_search EN ElasticSearch --> Sherlock: Получен пустой ответ Sherlock --> BackendSite: Получен пустой ответ Sherlock --> user: Пользователь получает страницу:\nРезультаты не найдены else Найдены товары alt Есть товары спектр Sherlock -> ElasticSearch: REST GET products/_search RU Sherlock -> ElasticSearch: REST GET products/_search EN note over ElasticSearch Категории спектр поднимаются наверх И товары внутри них сортируются по скорингу endnote else Товаров спектр не найдено Sherlock -> ElasticSearch: REST GET products/_search RU Sherlock -> ElasticSearch: REST GET products/_search EN note over ElasticSearch Товары сортируются по скорингу endnote end ElasticSearch --> Sherlock: Передает отсортированный\nсписок товаров Sherlock --> BackendSite: Список товаров BackendSite --> user: Пользователь получает страницу:\nРезультаты поиска end @enduml