Войти Регистрация
Data base

193. Похожие товары в ценовом коридоре и в наличии

Средняя

Магазин на Shopify показывает под карточкой куртки за $89 два похожих товара. Условия: цена от $50 до $120 включительно и товар в наличии.

Метаданные: price_usd (число), in_stock (true/false). Индекс: размерность 4, метрика euclidean. Вектор запроса — [0.5, 0.4, 0.8, 0.1].

В работе: Рекомендации в карточке товара с бизнес-ограничениями.

Pinecone · Pinecone (эмулятор: точный перебор)

Индекс

Размерность 4, метрика euclidean — чем меньше расстояние, тем выше в выдаче.

Пример: векторы

idvaluesmetadata
p-10.5, 0.4, 0.8, 0.1{"in_stock": true, "price_usd": 89}
p-20.6, 0.4, 0.7, 0.1{"in_stock": true, "price_usd": 120}
p-30.5, 0.5, 0.8, 0.2{"in_stock": true, "price_usd": 49}
p-40.4, 0.4, 0.85, 0.1{"in_stock": false, "price_usd": 75}
p-50.9, 0.1, 0.2, 0.6{"in_stock": true, "price_usd": 60}
p-60.5, 0.3, 0.6, 0.0{"in_stock": true, "price_usd": 50}

Ожидаемый ответ

p-1, p-2
Как проверяем Запрос — JSON, как тело index.query(): vector, topK и filter по метаданным. Ищем точным перебором по метрике индекса на 4 наборах векторов и сравниваем список id по порядку. Фильтр — по правилам Pinecone: $eq $ne $gt $gte $lt $lte $in $nin $exists $and $or.
{"vector": [ … ], "topK": 3, "filter": { … }}
фильтр метаданных$gte$lteboolean

Источник: на данных интернет-магазина: каталог товаров. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.