Qdrant - Vector Database

Discovery Search и Context Search

Рекомендации «ещё такое же» быстро надоедают. Discovery Search позволяет строить exploration - когда пользователь хочет что-то новое, но не случайное, а направленное его вкусом.

  • Netflix-подобные рекомендации: «как это, но в другом жанре»
  • Fashion recommendation: баланс между офисным и casual стилем
  • Iterative RAG уточнение: пользователь отмечает нерелевантные результаты

Предварительные знания

  • Recommendations API
  • Universal Query API

Три режима exploration: search, recommend, discover

Qdrant предлагает три принципиально разных парадигмы поиска, решающие разные задачи exploration. Понимание разницы между ними позволяет выбрать правильный инструмент для каждого use case.

РежимВходные данныеСемантикаUse case
Searchquery vectorБлижайшие к query в пространствеНайти похожее на то, что я ищу
Recommendpositive + negative IDsПохожее на positive, непохожее на negative«Ещё такое» / «Не такое»
Discovertarget + context pairstarget, направляемый contextExploration: «похоже на A, но в духе B»
Contextтолько context pairsЗолотая середина между парамиБез конкретного запроса, только ограничения

**Discovery** - самый нетривиальный режим. Он принимает `target` (желаемое направление) и `context` (пары positive/negative, задающие «зону»). Результаты находятся в области, где выполняются ограничения из context, при этом смещённые в сторону target. Это не просто recommend с ограничениями - алгоритм принципиально другой.

Discovery не требует query вектора из embedder - только ID существующих точек. Это делает его идеальным для UI-driven exploration: пользователь кликает «нравится/не нравится», система строит context без необходимости снова вычислять embeddings.

В чём принципиальное отличие Discovery от Recommend?

Context Search: поиск без target

**Context Search** - это Discovery без target. Только пары (positive, negative). Qdrant находит точки, которые находятся в «золотой середине»: ближе к positive, чем к negative, по всем парам одновременно. Это не рекомендация - это поиск баланса.

**Use cases для Context Search:** 1. **Персонализация без истории запросов**: пользователь только сказал что ему нравится и не нравится, без конкретного запроса 2. **Multimodal exploration**: positive - текстовые описания, negative - изображения (если multimodal embeddings) 3. **Creative search**: «как джаз, но не как классика» - помогает найти что-то новое в непривычной зоне 4. **Negative example driven**: иногда проще сказать что НЕ нужно, чем что нужно

Context Search особенно мощен в комбинации с фильтрами. Добавьте filter: `{must: [{key: 'price_range', match: {value: 'mid'}}]}` - и поиск баланса будет ограничен нужным ценовым диапазоном.

Context Search - это просто Recommend с несколькими negative примерами

Context Search определяет зону пространства через пары, а не отдельные positive/negative списки

В Recommend positive и negative - независимые списки. В Context - пары задают направления относительно друг друга. Результат: не «максимально похожее на все positive», а «точки внутри всех context-зон».

Какой результат возвращает чистый Context Search (Discovery без target)?

Discovery в production: MMR, diversity, Relevance Feedback

Три advanced механизма для production recommendation и RAG систем: **MMR** (Maximal Marginal Relevance) для diversity, **Relevance Feedback** для итеративного уточнения, и правильный выбор между recommend и discovery для разных задач.

**Когда что использовать:** - **ANN Search** → у вас есть чёткий query (текст/изображение) - **Recommend** → пользователь просматривал историю, есть лайки/дизлайки - **Discovery** → exploration: нужно что-то новое, но в определённом «духе» - **Context Search** → personalization feed без явного запроса

Какой режим наиболее подходит для персонализированного feed без явного поискового запроса?

Итоги

  • Search → ANN ближайшие к query; Recommend → positive/negative списки; Discovery → target + context зоны
  • Context Search (Discovery без target) находит «золотую середину» между всеми context парами
  • Discovery не требует embedder — только ID существующих точек в коллекции
  • Relevance Feedback (v1.17+): итеративное уточнение через Discovery с feedback от пользователя
  • Production паттерн: Recommend для «ещё такое», Discovery для exploration, Context для personalized feed

Что дальше

Discovery - на уровне алгоритмов. Последний урок - внутренности Qdrant: ACORN, Inline Storage, Gridstore.

  • ACORN, Inline Storage, Gridstore — Внутренние алгоритмы Qdrant v1.16-17: как они ускоряют filtered search
  • Recommend API — Основы: recommend как предшественник discovery
  • Universal Query — Unified API для всех режимов поиска включая discovery

Вопросы для размышления

  • Как бы вы объяснили разницу между Recommend и Discovery продакт-менеджеру? Приведите реальный пример из вашего продукта.
  • Что нужно учесть при построении Relevance Feedback системы, чтобы предотвратить filter bubble?
  • Как Context Search можно использовать для A/B тестирования разных стилей рекомендаций?

Связанные уроки

  • alg-12-bfs
Discovery Search и Context Search

0

1

Войти