Поиск по ключевым словам теряет покупателя, который пишет «что-нибудь тёплое для похода». Векторный поиск теряет того, кто вводит точный артикул. AACSearch запускает оба ретривера внутри одного поискового вызова и сливает два списка, так что ни один из запросов не заканчивается пустой страницей — и по каждому результату видно, какая сторона его нашла.
Объявите векторное поле в схеме коллекции и укажите текстовые поля, из которых оно строится. Эмбеддинги генерируются на сервере при индексации документа.
Перечислите текстовые поля и поле эмбеддингов в query_by. Тот же запрос вернёт один слитый ранжированный список — фильтры и фасеты действуют на обе стороны.
Задайте alpha, чтобы решить, сколько весит векторная оценка, включите реранкинг верхних результатов и сравните nDCG на golden-наборе запросов до выпуска изменения.
Трафик каталога неоднороден. Навигационным запросам — бренд, номер модели, код детали — нужно точное лексическое совпадение, а векторный индекс охотно вернёт что-то «похожее» вместо запрошенного товара. Описательные запросы — «тихая посудомойка для маленькой кухни» — почти не пересекаются по словам с карточкой товара и находятся только по смыслу.
Гибридный поиск сохраняет оба поведения. Документы, по которым сошлись ретривер по ключевым словам и векторный, поднимаются наверх; документ, найденный лишь одним из них, всё равно получает достойную слитую оценку. Поскольку reciprocal rank fusion работает с позициями, а не с сырыми оценками, калибровку оценок по коллекциям поддерживать не нужно.
Отправьте debug=true — и каждый результат получит объект _explain с сигналами ранжирования, а ответ — _trace с тем, что платформа сделала с запросом. Гибридные результаты также сообщают hybrid_search_info, так что на вопрос «почему этот товар первый?» отвечает сам ответ API, а не догадки.
OpenAI, Google или встроенная модель — настраивается в схеме, так что ваше приложение никогда само не вызывает модель эмбеддингов.
Reciprocal rank fusion — слияние по умолчанию; alpha в vector_query сдвигает баланс, когда коллекции это нужно.
filter_by, facet_by и sort_by работают одинаково в режимах поиска по ключевым словам, векторного и гибридного — фильтры по наличию и цене никогда не расходятся.
rerank: true пропускает верхние результаты через кросс-энкодер; если модель не уложилась во время, возвращается порядок движка, а не ошибка.
Впервые встречаете термин? В глоссарии есть статья «Гибридный поиск» — объяснение с азов.
{
"q": "something warm for hiking",
"query_by": "name,description,embedding",
"vector_query": "embedding:([], alpha: 0.6)",
"filter_by": "in_stock:true",
"rerank": true,
"debug": true
}
// -> hits[].hybrid_search_info, hits[]._explain, rerank: { "applied": true }Узнать больше
Лучший способ оценить поисковую платформу — не читать ещё одну сравнительную таблицу.
И только после этого принимайте решение.