Магазин на Shopify показывает под карточкой куртки за $89 два похожих товара. Условия: цена от $50 до $120 включительно и товар в наличии.
Метаданные: price_usd (число), in_stock (true/false). Индекс: размерность 4, метрика euclidean. Вектор запроса — [0.5, 0.4, 0.8, 0.1].
В работе: Рекомендации в карточке товара с бизнес-ограничениями.
Pinecone · Pinecone (эмулятор: точный перебор)
Индекс
Размерность 4, метрика euclidean — чем меньше расстояние, тем выше в выдаче.
Пример: векторы
| id | values | metadata |
|---|---|---|
p-1 | 0.5, 0.4, 0.8, 0.1 | {"in_stock": true, "price_usd": 89} |
p-2 | 0.6, 0.4, 0.7, 0.1 | {"in_stock": true, "price_usd": 120} |
p-3 | 0.5, 0.5, 0.8, 0.2 | {"in_stock": true, "price_usd": 49} |
p-4 | 0.4, 0.4, 0.85, 0.1 | {"in_stock": false, "price_usd": 75} |
p-5 | 0.9, 0.1, 0.2, 0.6 | {"in_stock": true, "price_usd": 60} |
p-6 | 0.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": { … }}
Источник: на данных интернет-магазина: каталог товаров. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Посмотреть данные, проверить часть фильтра. На зачёт не влияет.
Здесь появится результат отправки.