Для поиска написан бекенд на elasticsearch и API к нему.
Если коротко - отправляем в API параметры поиска (фильтр, сортировку, пагинацию и пр), в ответ получаем два объекта - новое состояние фильтра и список найденных серверов. Ниже на примерах описана часть сценариев, касающихся вывода фильтра - какие действия производим, что в результате нужно отправить API, что оно возвращает и как это потом должно выглядеть на сайте.
пользователь заходит на страницу поиска: https://www.data-xata.com/search
отправляем запрос:
curl -XPOST <https://api.data-xata.com/v2/search
>
в ответ API возвращает:
Панель фильтров заполняется так:
в массиве facets API возвращает фильтры, по которым можно фильтровать список серверов
Есть 4 типа отображения значений фильтра, все они показаны ниже на скриншотах:
Порядок и вид фильтров в панели - заранее задан в https://api.data-xata.com/v2/filters.json (сначала назначение, потом абонплата, за ней объем памяти и т.д.), наполнение значениями - приходит от API при каждом обновлении
Какому фильтру какая переменная соответствует - также указано в https://api.data-xata.com/v2/filters.json
Скриншот, после которого не должно остаться вопросов 😇
curl -XPOST <https://api.data-xata.com/v1/search> -d '
{
"filters": {
"eq:COMBO:cCmbPurpose": ["Игровой сервер"]
}
}
'
eq:COMBO:cCmbPurpose
- операция + ‘:’ + имя фильтра
панель фильтров после клика на один из фильтров
curl -XPOST <https://api.data-xata.com/v1/search> -d '
{
"filters": {
"eq:COMBO:cCmbPurpose": ["Игровой сервер", "Стримминг"]
}
}
'
Ответ получаем аналогичный предыдущему
Перерисовываем панель и список серверов как описано выше
curl -XPOST <https://api.data-xata.com/v1/search> -d '
{
"filters": {
"eq:COMBO:cCmbPurpose": ["Игровой сервер", "Стримминг"],
“eq:RAM:iSize": [256]
}
}
'
Ответ получаем аналогичный предыдущему
Перерисовываем панель и список серверов как описано выше