Milvus · Milvus 2.6
Похожие объявления ищутся в коллекции на 40 млн векторов с HNSW. Фильтр city == "Тюмень" and category == "шины" оставляет около 200 тыс. объявлений — 0,5% коллекции.
На таких запросах recall@20 падает до 0,7, иногда возвращается меньше 20 результатов, хотя подходящих объявлений тысячи. Без фильтра recall 0,96.
В работе: Векторный поиск с узкими скалярными фильтрами: город, категория, продавец.
Как проверяем
Движка Milvus в браузере пока нет, поэтому здесь не запрос, а выбор решения. Выберите один вариант. После ответа — почему каждый вариант верный или нет. Ответ один на подход: после него показываем разбор.
Источник: на данных классифайда: похожие объявления в городе. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Что сделать для узких фильтров?
- Для фильтров, отсекающих больше 98%, искать перебором (FLAT) по отфильтрованному подмножеству — например, сделать city partition key, чтобы поиск сразу шёл по нужным партициям
- Поднять ef до 10 000 для всех запросов
- Перейти на IVF_PQ
- Сначала искать топ-20 без фильтра, потом фильтровать в приложении