Строка поиска редко ищет что-то одно. Покупатель, который вводит «возврат», хочет страницу с правилами, а не товар; тот, кто вводит «аэрогриль», хочет сначала товары, а потом рецепты. Федеративный поиск отправляет один запрос, выполняет поиск по каждой коллекции с её собственными параметрами и отвечает одним ответом — одно обращение по сети вместо отдельного на каждый тип контента.
У товаров, статей и страниц справки разные схемы, ранжирование и циклы обновления — они остаются отдельными коллекциями.
Отправьте массив searches в multi_search. Каждый элемент называет свою коллекцию и несёт собственные query_by, фильтры и размер страницы.
По умолчанию на каждый поиск приходит свой набор результатов — идеально для выпадающего списка с секциями. Укажите union: true, чтобы слить всё в один упорядоченный список.
Сгруппированные результаты напрямую ложатся на автодополнение с секциями: «Товары», «Руководства», «Справка» — у каждой свой счётчик и своё «показать все». Слитые результаты подходят универсальной странице выдачи, где должен побеждать лучший ответ независимо от типа.
Поскольку каждый поиск в пакете сохраняет собственные параметры, товары можно фильтровать по наличию и бустить по марже, а статьи справки искать только по заголовку и тексту — без схемы «по наименьшему общему знаменателю».
В браузерном ключе перечислены коллекции, по которым он может искать. Витрина держит один короткоживущий ключ, а запрос к коллекции вне этого списка отклоняется на сервере — федеративный поиск не расширяет доступ.
У каждого элемента свои query_by, filter_by, sort_by, пресет и размер страницы.
union: true сливает результаты всех поисков в один упорядоченный набор.
Неудавшийся поиск возвращает собственный код ошибки внутри пакета; остальные наборы результатов всё равно приходят.
Правила поиска, эксперименты и отладочная трассировка работают в multi_search точно так же, как в поиске по одной коллекции.
{
"searches": [
{ "collection": "products", "q": "air fryer", "query_by": "name,brand",
"filter_by": "in_stock:true", "per_page": 6 },
{ "collection": "recipes", "q": "air fryer", "query_by": "title,body", "per_page": 3 },
{ "collection": "help", "q": "air fryer", "query_by": "title", "per_page": 2 }
]
}
// -> { "results": [ { products… }, { recipes… }, { help… } ] }Узнать больше
Лучший способ оценить поисковую платформу — не читать ещё одну сравнительную таблицу.
И только после этого принимайте решение.