Qdrant Multivector: поиск по нескольким векторам одной записи
На странице · 3 разделов
Multivector в Qdrant хранит несколько векторов как одну запись и сравнивает её с многовекторным запросом через MaxSim. Ниже — два искусственных примера и способ проверить их порядок; настоящую модель и сервер редакция не запускала. Понадобятся уже работающий локальный Qdrant v1.19.x и терминал.
Технический уровень. Понадобятся уже работающий локальный Qdrant v1.19.x, терминал Linux/macOS и
curl. Это не рецепт установки AI-модели. Инструкция сверена с документацией 20 октября 2026 года: редакция проверила команды только на имитации HTTP-сервера, не запускала настоящий Qdrant. Пример без ключа обращается к127.0.0.1; не открывайте тестовую базу в сеть. s1 s5
Зачем одной записи несколько векторов?
Обычно одной записи соответствует один вектор — список чисел для поиска похожего. Если у одного объекта несколько представлений, Qdrant может хранить их в одной точке как матрицу (несколько одинаковых по длине списков чисел). При сравнении max_sim для каждого вектора запроса выбирает наиболее похожий вектор точки и складывает оценки. Это даёт одну оценку на запись, а не отдельный ответ для каждой строки. Такие матрицы могут создавать специализированные модели вроде ColBERT, но наш короткий пример использует придуманные числа без модели. Для раздельного поиска по заголовку и изображению Qdrant описывает другой механизм — именованные векторы. s1
Как сравнить две учебные записи?
Сначала подготовьте локальный Qdrant. В терминале Linux/macOS используйте новую коллекцию demo_multivector_20261020; если она уже существует, остановитесь и замените имя во всех командах. Не выполняйте опыт над рабочей коллекцией. Числа ниже придуманы для проверки механизма, не являются эмбеддингами реального текста. s1 s3 s5
- Создайте коллекцию с векторами из двух чисел и сравнением
max_sim:curl -fsS -X PUT 'http://127.0.0.1:6333/collections/demo_multivector_20261020' -H 'Content-Type: application/json' -d '{"vectors":{"size":2,"distance":"Cosine","multivector_config":{"comparator":"max_sim"}}}'. Ожидаетсяstatus: ok,result: true; ошибка создания — повод проверить версию и имя коллекции, а не менять рабочую базу. s1 s3 - Сохраните две точки с двумя подвекторами в каждой:
curl -fsS -X PUT 'http://127.0.0.1:6333/collections/demo_multivector_20261020/points?wait=true' -H 'Content-Type: application/json' -d '{"points":[{"id":1,"vector":[[1,0],[0,1]]},{"id":2,"vector":[[1,0],[1,0]]}]}'. Проверьтеresult.status: completedдо поиска. Повторный upsert с теми же ID заменит учебные точки. s1 s4 - Отправьте запрос с двумя направлениями:
curl -fsS -X POST 'http://127.0.0.1:6333/collections/demo_multivector_20261020/points/query' -H 'Content-Type: application/json' -d '{"query":[[1,0],[0,1]],"limit":2,"params":{"exact":true}}'. Сравнитеidиscoreвresult.points. Расчётный ориентир для Cosine: ID1получаетmax(1,0) + max(0,1) = 2; ID2—max(1,1) + max(0,0) = 1. Это не измеренный ответ Qdrant: сначала убедитесь, что обе точки сохранены и сервер вернул их в ответе. s1 s2
Когда этот способ не подходит?
Если нужен обычный поиск по одному вектору или по ID точки, матрица усложнит данные без необходимости. Не смешивайте многовекторный MaxSim с именованными векторами для разных полей; при сравнении настоящих текстов понадобится совместимая модель, одинаковая размерность её векторов и проверка качества на собственных примерах. Официальная документация ограничивает произведение числа подвекторов и их размерности значением меньше 1 048 576; из размера данных нельзя вывести минимум RAM/VRAM. Права на документы и допустимые записи проверяйте отдельно: оценка сходства не заменяет фильтр доступа. s1
Источники
- Qdrant — Vectors: Multivectors и Named Vectors. Получено 20.10.2026.
- Qdrant API v1.19.x — Query points. Получено 20.10.2026.
- Qdrant API v1.19.x — Create a collection. Получено 20.10.2026.
- Qdrant API v1.19.x — Upsert points. Получено 20.10.2026.
- Qdrant — Local Quickstart. Получено 20.10.2026.