# Qdrant: как удалить точки по фильтру и проверить выборку

Источник: https://modelium.tech/zhurnal/qdrant-udalit-tochki-po-filtru/

Qdrant позволяет удалить точки по фильтру поля payload — дополнительным данным записи. Перед удалением посчитайте совпадения и просмотрите их ID тем же фильтром, а после запроса проверьте, что они исчезли и другая запись осталась. Ниже — только учебная коллекция: удаление рабочих данных требует проверенной резервной копии и отдельного плана восстановления.

**Технический уровень.** Нужен свой работающий Qdrant и умение отправлять запросы через терминал; это не домашний рецепт установки модели. Ниже приведена инструкция по официальной документации API v1.19.x, сверенной 17 октября 2026 года. Modelium не запускал сервер и не воспроизводил удаление. Все команды направлены только на `127.0.0.1` и специально названную учебную коллекцию; **не подставляйте вместо неё рабочую**. Если Qdrant требует ключ, используйте свои права локально, не публикуйте секрет. [s1](#src-s1) [s4](#src-s4)

## Что будет удалено и как заранее увидеть совпадения?

**Точка** в Qdrant — запись с ID, вектором и дополнительными полями (*payload*). Пусть у двух тестовых записей поле `stage` равно соответственно `old` и `current`. Фильтр `stage=old` должен выбрать только первую. Удаление по фильтру меняет данные коллекции, а обычный фильтр поиска их не трогает. [s4](#src-s4) [s6](#src-s6)

Сначала откройте [инструкцию по запуску локального Qdrant](/zhurnal/qdrant-lokalno/) и убедитесь, что ваш *собственный тестовый* API доступен на `http://127.0.0.1:6333`. Создайте отдельную коллекцию для упражнения: `curl -fsS -X PUT 'http://127.0.0.1:6333/collections/docs_delete_sandbox_20261017' -H 'Content-Type: application/json' -d '{"vectors":{"size":2,"distance":"Cosine"}}'`. Ожидайте `status: ok` и `result: true`; если коллекция уже есть, не загружайте в неё пример вслепую — возьмите другое **новое учебное имя и последовательно замените его во всех командах**. Число `size:2` здесь только размер игрушечного вектора, не конфигурация для реальных документов. [s1](#src-s1)

Добавьте две учебные записи: `curl -fsS -X PUT 'http://127.0.0.1:6333/collections/docs_delete_sandbox_20261017/points?wait=true' -H 'Content-Type: application/json' -d '{"points":[{"id":1,"vector":[1,0],"payload":{"stage":"old","note":"учебная старая запись"}},{"id":2,"vector":[0,1],"payload":{"stage":"current","note":"учебная текущая запись"}}]}'`. Ожидайте `status: ok`, а в `result.status` — `completed`; если операция не завершилась, остановитесь и выясните её состояние. Повторная загрузка с теми же ID **перезаписывает** точки, поэтому выполняйте шаг только в новой учебной коллекции. [s3](#src-s3)

Посчитайте будущие совпадения: `curl -fsS -X POST 'http://127.0.0.1:6333/collections/docs_delete_sandbox_20261017/points/count' -H 'Content-Type: application/json' -d '{"filter":{"must":[{"key":"stage","match":{"value":"old"}}]},"exact":true}'`. Ожидайте `result.count: 1`. Если число другое — **не продолжайте**. [s2](#src-s2)

Просмотрите сами записи с *тем же* фильтром: `curl -fsS -X POST 'http://127.0.0.1:6333/collections/docs_delete_sandbox_20261017/points/scroll' -H 'Content-Type: application/json' -d '{"filter":{"must":[{"key":"stage","match":{"value":"old"}}]},"limit":10,"with_payload":true,"with_vector":false}'`. В `result.points` должен быть **только ID 1** с `stage: old`; `result.next_page_offset` должен быть пустым. Scroll выдаёт страницы: при большом рабочем наборе один экран **не** доказывает полноту совпадений — переходите по offset или прекращайте операцию. [s5](#src-s5)

## Как удалить только проверенную выборку?

**Только если count равен 1, Scroll показал ID 1 и это учебная коллекция**, отправьте: `curl -fsS -X POST 'http://127.0.0.1:6333/collections/docs_delete_sandbox_20261017/points/delete?wait=true' -H 'Content-Type: application/json' -d '{"filter":{"must":[{"key":"stage","match":{"value":"old"}}]}}'`. Ожидайте `status: ok` и `result.status: completed`; `acknowledged` означает лишь принятие в очередь, `wait_timeout` — не подтверждённое завершение. Даже `completed` не показывает, *какие* ID вы удалили: проверьте данные повторным чтением. [s4](#src-s4)

Выполните прежнюю команду подсчёта ещё раз: `result.count` должен стать `0`. Затем прежнюю команду Scroll: `result.points` должен стать пустым. Наконец, проверьте сохранность другой записи по её ID: `curl -fsS 'http://127.0.0.1:6333/collections/docs_delete_sandbox_20261017/points/2?with_payload=true&with_vector=false'`; в ответе ожидается ID 2 с `stage: current`. Синтаксис чтения точки по ID описан в разделе Points официальной документации. Это **критерии для самостоятельного теста**, а не результат запуска редакции. [s2](#src-s2) [s5](#src-s5) [s6](#src-s6)

## Когда нельзя повторять это на рабочей коллекции?

Если фильтр неожиданно выбрал много записей, поле `stage` отсутствует или запись меняется параллельно, не отправляйте delete. Между предварительным Scroll и удалением другие процессы могут изменить точки: показанная проверка **не блокирует** записи и не даёт транзакционной гарантии набора ID. Это ограничение последовательности самостоятельных API-запросов, а не подтверждённый эксперимент Modelium. Для небольшого заранее известного набора ID у Qdrant есть альтернативный режим `points: [ID]`, но это тоже удаление данных. [s4](#src-s4) [s5](#src-s5)

Прежде чем работать с реальными данными, сделайте и **проверьте восстановление** снимка нужной коллекции по [инструкции о Qdrant snapshots](/zhurnal/qdrant-snapshots/); сам снимок не содержит алиасов, а в кластере требуются отдельные снимки узлов. Не считайте ответ HTTP 200 подтверждением безопасного удаления: сохраните контрольные ID, проверьте счёт и оставшиеся записи. Для фильтрации без изменения данных читайте [гайд по метаданным](/zhurnal/qdrant-filtry-metadannyh/). [s7](#src-s7) [s2](#src-s2) [s5](#src-s5)

**Следующий шаг:** [сделайте проверенную резервную копию](/zhurnal/qdrant-snapshots/) перед переносом любой процедуры на рабочие документы. [s7](#src-s7)

## Источники

1. [Qdrant — Create a collection, API v1.19.x](https://api.qdrant.tech/v-1-19-x/api-reference/collections/create-collection.md) — получено 2026-10-17
2. [Qdrant — Count points, API v1.19.x](https://api.qdrant.tech/v-1-19-x/api-reference/points/count-points.md) — получено 2026-10-17
3. [Qdrant — Upsert points, API v1.19.x](https://api.qdrant.tech/v-1-19-x/api-reference/points/upsert-points.md) — получено 2026-10-17
4. [Qdrant — Delete points, API v1.19.x](https://api.qdrant.tech/v-1-19-x/api-reference/points/delete-points.md) — получено 2026-10-17
5. [Qdrant — Scroll points, API v1.19.x](https://api.qdrant.tech/v-1-19-x/api-reference/points/scroll-points.md) — получено 2026-10-17
6. [Qdrant — Manage Data: Points](https://qdrant.tech/documentation/manage-data/points/) — получено 2026-10-17
7. [Qdrant — Snapshots](https://qdrant.tech/documentation/snapshots/) — получено 2026-10-17
