Qdrant group by: как сгруппировать фрагменты по документам
На странице · 3 разделов
Если поиск в Qdrant возвращает несколько фрагментов одного документа подряд, запрос групп с group_by: document_id собирает их по идентификатору документа. Укажите group_size: 1, чтобы получить не более одного фрагмента внутри каждой группы. Ниже — пример на искусственных данных; настоящий Qdrant редакция не запускала.
Технический уровень. Нужны запущенный собственный Qdrant v1.19.x, терминал Linux или macOS и
curl. Это не бытовой рецепт установки AI-модели. Сверена документация API 19 октября 2026 года; команды проверены на HTTP-фикстуре, но настоящий Qdrant и модель редакция не запускала. Сервер примера доступен только по127.0.0.1; если у вас включён API-ключ, используйте свою защищённую схему авторизации и не вставляйте его в публичные команды. s1 s3
Зачем группировать найденные фрагменты?
Если один документ разбит на части, обычный поиск может показать несколько его частей подряд, вытеснив другие документы. В Qdrant каждая часть — точка с вектором (числовым представлением для поиска) и дополнительными полями (payload). Запишите в поле document_id один и тот же идентификатор для частей одного документа; запрос групп соберёт результаты с одинаковым значением в одну группу. Это не удаляет повторяющиеся точки из коллекции. s1 s2 s5
Как сравнить обычную выдачу и группы?
Если локальный сервер ещё не подготовлен, сначала откройте установку Qdrant. Работайте только с новой учебной коллекцией demo_group_20261019: если такое имя уже занято, выберите другое свободное и замените его во всех командах. В этом примере векторы двухчисловые и заданы вручную, не созданы AI-моделью; в реальном поиске вектор запроса и векторы записей нужно получить совместимым способом. s3 s4 s5
- Создайте отдельную коллекцию:
curl -fsS -X PUT 'http://127.0.0.1:6333/collections/demo_group_20261019' -H 'Content-Type: application/json' -d '{"vectors":{"size":2,"distance":"Cosine"}}'. Если ответ показываетstatus: okиresult: true, продолжайте; при ошибке остановитесь. s3 - Добавьте четыре искусственных фрагмента:
curl -fsS -X PUT 'http://127.0.0.1:6333/collections/demo_group_20261019/points?wait=true' -H 'Content-Type: application/json' -d '{"points":[{"id":1,"vector":[1,0],"payload":{"document_id":"a","part":1}},{"id":2,"vector":[0.9,0.1],"payload":{"document_id":"a","part":2}},{"id":3,"vector":[0.8,0.2],"payload":{"document_id":"b","part":1}},{"id":4,"vector":[0,1],"payload":{"document_id":"c","part":1}}]}'. Дождитесьstatus: okиresult.status: completed. Повторный Upsert с существующим ID перезаписывает точку — никогда не направляйте этот пример в рабочую коллекцию. s4 - Сравните обычный поиск с вектором
[1,0]:curl -fsS -X POST 'http://127.0.0.1:6333/collections/demo_group_20261019/points/query' -H 'Content-Type: application/json' -d '{"query":[1,0],"limit":3,"with_payload":true}'. В неизменённом учебном наборе ожидайте вresult.pointsсначала точки с ID 1 и 2 из документаa, затем ID 3 изb. Это ожидаемая последовательность на указанных векторах, не снятый редакцией ответ Qdrant. s2 s4 - Попросите Qdrant вернуть две группы, по одному фрагменту на документ:
curl -fsS -X POST 'http://127.0.0.1:6333/collections/demo_group_20261019/points/query/groups' -H 'Content-Type: application/json' -d '{"query":[1,0],"group_by":"document_id","limit":2,"group_size":1,"with_payload":true}'. Ищитеresult.groups: ожидаются группы сid: "a"(хит ID 1) иid: "b"(хит ID 3); полеhitsсодержит найденные точки группы. Здесьlimitозначает число групп, аgroup_size— максимальное число точек внутри одной группы. s1 s5
Что проверить и когда это не подойдёт?
Сверьте document_id и ID найденной точки в каждой группе. Если обе первые группы относятся к одному документу или ответ пуст, проверьте, что поле document_id записано при загрузке каждой точки, запрос идёт в учебную коллекцию, а сервер поддерживает этот API. Поле группировки должно быть строковым или числовым; многозначное поле может включить одну точку в несколько групп, поэтому для результата «один документ — одна группа» используйте одиночный ID. limit и group_size — предельные, не гарантированные числа результатов: подходящих точек может быть меньше. s1 s5
Группировка не проверяет права доступа к документам. Если записи разных пользователей хранятся в одной коллекции, сначала ограничьте выборку допустимыми точками через фильтр по метаданным, а разграничение доступа проверяйте отдельно. Если сервер отвечает ошибкой подключения, проверьте его запуск на 127.0.0.1:6333; не открывайте порт в интернет ради примера. Этот гайд проверяет форму поискового ответа, но не качество смыслового поиска, реальный вывод модели или производительность Qdrant. s1 s2
Источники
- Qdrant — Query point groups, API v1.19.x — Снимок group-api-v119.md и SHA-256 в source-manifest.json. Получено 19.10.2026.
- Qdrant — Query points, API v1.19.x — Снимок query-api-v119.md. Получено 19.10.2026.
- Qdrant — Create collection, API v1.19.x — Снимок create-api-v119.md. Получено 19.10.2026.
- Qdrant — Upsert points, API v1.19.x — Снимок upsert-api-v119.md. Получено 19.10.2026.
- Qdrant — Search documentation, Grouping API — Снимок grouping-guide.html: пример фрагментов одного документа, limit/group_size best effort. Получено 19.10.2026.