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

186. Фильтр оставляет 0,5% коллекции, а топ неполный

Сложная

Milvus · Milvus 2.6

Похожие объявления ищутся в коллекции на 40 млн векторов с HNSW. Фильтр city == "Тюмень" and category == "шины" оставляет около 200 тыс. объявлений — 0,5% коллекции.

На таких запросах recall@20 падает до 0,7, иногда возвращается меньше 20 результатов, хотя подходящих объявлений тысячи. Без фильтра recall 0,96.

В работе: Векторный поиск с узкими скалярными фильтрами: город, категория, продавец.

Как проверяем Движка Milvus в браузере пока нет, поэтому здесь не запрос, а выбор решения. Выберите один вариант. После ответа — почему каждый вариант верный или нет. Ответ один на подход: после него показываем разбор.
скалярная фильтрацияFLATpartition keyHNSW

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

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

Что сделать для узких фильтров?

  • Для фильтров, отсекающих больше 98%, искать перебором (FLAT) по отфильтрованному подмножеству — например, сделать city partition key, чтобы поиск сразу шёл по нужным партициям
  • Поднять ef до 10 000 для всех запросов
  • Перейти на IVF_PQ
  • Сначала искать топ-20 без фильтра, потом фильтровать в приложении