Векторная база данных даёт ближайших соседей, а остальное — фильтрацию по наличию, фасеты, контроль доступа, аналитику — оставляет вам. В AACSearch векторное поле — просто ещё одно поле коллекции: оно запрашивается тем же поисковым вызовом, сужается тем же filter_by и защищено теми же ключами с ограничением доступа.
Добавьте поле типа float[]. Либо платформа сама построит эмбеддинги выбранных текстовых полей при индексации, либо отправляйте векторы, посчитанные у себя.
vector_query принимает вектор прямо в запросе, id документа для поиска похожих или изображение в base64 для поля с эмбеддингами изображений.
Сочетайте с filter_by и отсекайте слабые совпадения через distance_threshold, чтобы «похожее» никогда не означало «нет в наличии» или «не та категория».
Вектор в запросе — общий случай: вы сами построили эмбеддинг запроса и хотите k ближайших документов. Запрос по id документа превращает тот же индекс в блок «похожие товары» вообще без вызова модели эмбеддингов. Изображение в base64 для поля с эмбеддингами изображений даёт поиск по фото. Всё это — один параметр обычного поискового эндпоинта.
Чисто векторный поиск не знает понятия точного совпадения. Номера деталей, артикулы, коды моделей и названия брендов должны идти через поиск по ключевым словам или гибридный, где идентификатор либо совпадает, либо нет. Используйте только векторный поиск для блоков похожих товаров, поиска по изображению и запросов, где пересечения по словам ждать не приходится.
Эмбеддинги из вашего собственного пайплайна индексируются и запрашиваются как любое другое поле — без привязки к одной модели.
Укажите документ вместо вектора и получите его соседей — блок похожих товаров одним запросом.
Загрузите фото или передайте его URL в эндпоинт поиска по изображению и получите ближайшие к нему документы.
k, distance_threshold, ef и flat_search_cutoff доступны в каждом запросе, так что полнота и задержка настраиваются под задачу, а не под кластер.
Впервые встречаете термин? В глоссарии есть статья «Векторные эмбеддинги» — объяснение с азов.
{
"q": "*",
"vector_query": "embedding:([], id: sku-1042, k: 12, distance_threshold: 0.35)",
"filter_by": "category:=boots && in_stock:true",
"exclude_fields": "embedding"
}
// -> the 12 nearest in-stock boots to sku-1042Узнать больше
Лучший способ оценить поисковую платформу — не читать ещё одну сравнительную таблицу.
И только после этого принимайте решение.