@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