Перейти к содержанию
modelium.
Начать с задачи
←

Qdrant group by: как сгруппировать фрагменты по документам

Если поиск в 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

  1. Создайте отдельную коллекцию: 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
  2. Добавьте четыре искусственных фрагмента: 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
  3. Сравните обычный поиск с вектором [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
  4. Попросите 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

Источники

  1. Qdrant — Query point groups, API v1.19.x — Снимок group-api-v119.md и SHA-256 в source-manifest.json. Получено 19.10.2026.
  2. Qdrant — Query points, API v1.19.x — Снимок query-api-v119.md. Получено 19.10.2026.
  3. Qdrant — Create collection, API v1.19.x — Снимок create-api-v119.md. Получено 19.10.2026.
  4. Qdrant — Upsert points, API v1.19.x — Снимок upsert-api-v119.md. Получено 19.10.2026.
  5. Qdrant — Search documentation, Grouping API — Снимок grouping-guide.html: пример фрагментов одного документа, limit/group_size best effort. Получено 19.10.2026.