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