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

195. Зимние товары без уценки: фильтр по массиву тегов

Средняя

У карточек в метаданных — массив строк tags, например ["зима", "детское"]. Подборка «К зиме» в Новосибирске показывает 3 похожих товара с тегом зима и без тега уценка.

Индекс: размерность 4, метрика dotproduct. Вектор запроса — [0.3, 0.7, 0.2, 0.6].

В работе: Подборки и витрины по тегам поверх векторного поиска.

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

Индекс

Размерность 4, метрика dotproduct.

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

idvaluesmetadata
sku-10.3, 0.7, 0.2, 0.6{"tags": ["зима", "детское"]}
sku-20.3, 0.8, 0.2, 0.6{"tags": ["зима", "уценка"]}
sku-30.2, 0.6, 0.3, 0.5{"tags": ["зима"]}
sku-40.4, 0.7, 0.1, 0.6{"tags": ["лето"]}
sku-50.1, 0.3, 0.1, 0.2{"tags": ["зима", "спорт"]}
sku-60.3, 0.6, 0.2, 0.7{"tags": ["спорт", "зима"]}

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

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

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

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