Фасеты — это место, где строка поиска превращается в навигацию. Они работают, только когда цифры честные: «Nike (42)» рядом с чекбоксом должно быть ровно тем, что вернёт клик. AACSearch считает счётчики фасетов для текущего запроса и уже применённых фильтров в том же запросе, что и результаты, поэтому они не могут разойтись.
Отметьте бренд, категорию, размер или любое другое поле как фасет в схеме коллекции — поддерживаются строки, числа и массивы.
Добавьте facet_by в поисковый запрос. Ответ вернёт все значения этих полей с числом результатов, которое останется при выборе каждого.
Клик превращается в выражение фильтра. Следующий ответ пересчитывает все остальные фасеты для суженной выборки.
Листинг категории — это поиск с фильтром и без текста. Он читает те же счётчики фасетов, что и текстовый запрос, поэтому фасетная навигация, панели «уточнить поиск» и страницы каталога работают на одном коде — и правила мерчандайзинга действуют на них все.
Фасет брендов на четыреста значений — это не фильтр, а стена. max_facet_values ограничивает, сколько значений вернётся, а facet_query ищет внутри самого фасета: ввод «sam» в поле бренда возвращает «Samsung» с подсветкой совпадения, без загрузки полного списка.
Чтобы витрины не запрашивали произвольные фасеты, зафиксируйте конфигурацию в профиле поиска: браузерный ключ, привязанный к профилю, может использовать только те фасеты, поля и порядки сортировки, которые задаёт профиль.
Числа в фасетах отражают текстовый запрос и все активные фильтры, а не всю коллекцию.
facet_query фильтрует значения фасета по префиксу и подсвечивает совпадение.
Диапазоны, списки, отрицание и булевы комбинации в одном выражении filter_by — цена, наличие и атрибуты вместе.
Виджеты, совместимые с React InstantSearch, рендерят списки уточнений, поля диапазонов и чипы текущих фильтров поверх того же API.
Впервые встречаете термин? В глоссарии есть статья «Фасетный поиск» — объяснение с азов.
{
"q": "running shoes",
"query_by": "name,brand",
"facet_by": "brand,size,color",
"max_facet_values": 20,
"facet_query": "brand:ni",
"filter_by": "price:[3000..9000] && in_stock:true"
}
// -> facet_counts: [ { "field_name": "brand", "counts": [ { "value": "Nike", "count": 42 } ] } ]Узнать больше
Лучший способ оценить поисковую платформу — не читать ещё одну сравнительную таблицу.
И только после этого принимайте решение.