Выбор ответа Senior Эмбеддинги и векторный поиск обновлено

Фильтрация в векторном поиске

Вопрос

В ANN-индексе миллион документов 1000 клиентов. Запрос: top-10 похожих только среди документов одного клиента. Сделали поиск top-10 и потом отфильтровали по клиенту. Что не так?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: После пост-фильтрации часто остаётся меньше 10 или ноль: у клиента 0,1% индекса. Если клиенту принадлежит малая доля индекса, среди глобальных 10 ближайших его документов почти нет.

Варианты ответа

  1. Ничего: пост-фильтрация даёт точный top-10, просто работает чуть медленнее
  2. Фильтр по клиенту изменит нормы векторов документов, и порядок соседей собьётся
  3. ANN-индекс не возвращает идентификаторы документов, поэтому фильтровать по клиенту нечем
  4. После пост-фильтрации часто остаётся меньше 10 или ноль: у клиента 0,1% индексаправильный ответ

Разбор

Если клиенту принадлежит малая доля индекса, среди глобальных 10 ближайших его документов почти нет. Решения: фильтрация во время обхода индекса (поддерживают Qdrant, Milvus, частично pgvector с итеративным сканированием в новых версиях), отдельный индекс или партиция на крупного клиента, увеличенный top перед фильтром. Векторы фильтр не меняет. Идентификаторы индекс, разумеется, хранит.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.