Удаление документов

Удаление документов поддерживается только в RT режиме для следующих типов таблиц:

  • RT таблицы
  • Percolate таблицы
  • Распределённые таблицы, которые содержат только RT таблицы в качестве локальных или удалённых агентов.

Вы можете удалить существующие документы из таблицы, основываясь либо на их ID, либо на определённых условиях.

Также доступно массовое удаление для удаления нескольких документов.

Удаление документов можно выполнить как через SQL, так и через JSON интерфейсы.

Для SQL ответ о успешной операции будет содержать количество удалённых строк.

Для JSON используется endpoint json/delete. Сервер ответит JSON объектом, указывающим, была ли операция успешной и сколько строк удалено.

Рекомендуется использовать очистку таблицы вместо удаления для удаления всех документов из таблицы, так как это гораздо более быстрая операция.

В этом примере мы удаляем все документы, которые соответствуют полнотекстовому запросу test document из таблицы с именем test:

‹›
  • SQL
  • JSON
  • PHP
  • Python
  • Python-asyncio
  • javascript
  • Java
  • C#
  • Rust
  • TypeScript
  • Go
📋
mysql> SELECT * FROM TEST;
+------+------+-------------+------+
| id   | gid  | mva1        | mva2 |
+------+------+-------------+------+
|  100 | 1000 | 100,201     | 100  |
|  101 | 1001 | 101,202     | 101  |
|  102 | 1002 | 102,203     | 102  |
|  103 | 1003 | 103,204     | 103  |
|  104 | 1004 | 104,204,205 | 104  |
|  105 | 1005 | 105,206     | 105  |
|  106 | 1006 | 106,207     | 106  |
|  107 | 1007 | 107,208     | 107  |
+------+------+-------------+------+
8 rows in set (0.00 sec)
mysql> DELETE FROM TEST WHERE MATCH ('test document');
Query OK, 2 rows affected (0.00 sec)
mysql> SELECT * FROM TEST;
+------+------+-------------+------+
| id   | gid  | mva1        | mva2 |
+------+------+-------------+------+
|  100 | 1000 | 100,201     | 100  |
|  101 | 1001 | 101,202     | 101  |
|  102 | 1002 | 102,203     | 102  |
|  103 | 1003 | 103,204     | 103  |
|  104 | 1004 | 104,204,205 | 104  |
|  105 | 1005 | 105,206     | 105  |
+------+------+-------------+------+
6 rows in set (0.00 sec)
‹›
Response
{
    "table":"test",
    "deleted":2,
}

Здесь — удаление документа с id, равным 1, из таблицы с именем test:

‹›
  • SQL
  • JSON
  • PHP
  • Python
  • Python-asyncio
  • javascript
  • Java
  • C#
  • Rust
  • TypeScript
  • Go
📋
mysql> DELETE FROM TEST WHERE id=1;
Query OK, 1 rows affected (0.00 sec)
‹›
Response
{
    "table": "test",
    "_id": 1,
    "found": true,
    "result": "deleted"
}

Здесь удаляются документы с id, совпадающими со значениями из таблицы с именем test:

Обратите внимание, что формы удаления с id=N или id IN (X,Y) самые быстрые, так как они удаляют документы без выполнения поиска. Также обратите внимание, что ответ содержит только id первого удалённого документа в соответствующем поле _id.

‹›
  • SQL
  • JSON
  • PHP
📋
DELETE FROM TEST WHERE id IN (1,2);
‹›
Response
Query OK, 2 rows affected (0.00 sec)

Manticore SQL позволяет использовать сложные условия для оператора DELETE.

Например, здесь мы удаляем документы, которые соответствуют полнотекстовому запросу test document и имеют атрибут mva1 со значением больше 206 или значения mva1 равные 100 или 103 из таблицы с именем test:

‹›
  • SQL
SQL
📋
DELETE FROM TEST WHERE MATCH ('test document') AND ( mva1>206 or mva1 in (100, 103) );
SELECT * FROM TEST;
‹›
Response
Query OK, 4 rows affected (0.00 sec)
+------+------+-------------+------+
| id   | gid  | mva1        | mva2 |
+------+------+-------------+------+
|  101 | 1001 | 101,202     | 101  |
|  102 | 1002 | 102,203     | 102  |
|  104 | 1004 | 104,204,205 | 104  |
|  105 | 1005 | 105,206     | 105  |
+------+------+-------------+------+
6 rows in set (0.00 sec)

Вот пример удаления документов в таблице test кластера cluster. Обратите внимание, что необходимо указать свойство кластера вместе со свойством таблицы, чтобы удалить строку из таблицы внутри репликационного кластера:

‹›
  • SQL
  • JSON
  • PHP
  • Python
  • Python-asyncio
  • javascript
  • Java
  • C#
  • Rust
  • TypeScript
  • Go
📋
delete from cluster:test where id=100;
‹›
Response
Array(
    [_index] => test
    [_id] => 100
    [found] => true
    [result] => deleted
)

Массовое удаление

Вы также можете выполнить несколько операций удаления за один вызов, используя конечную точку /bulk. Эта конечная точка работает только с данными, у которых Content-Type установлен в application/x-ndjson. Данные должны быть отформатированы как JSON, разделённый переводами строк (NDJSON). По сути, это означает, что каждая строка должна содержать ровно одно JSON-выражение и заканчиваться переводом строки \n и, возможно, \r.

‹›
  • JSON
  • PHP
  • Python
  • Python-asyncio
  • javascript
  • Java
  • C#
  • Rust
  • TypeScript
  • Go
📋
POST /bulk
{ "delete" : { "table" : "test", "id" : 1 } }
{ "delete" : { "table" : "test", "query": { "equals": { "int_data" : 20 } } } }
‹›
Response
{
   "items":
   [
      {
         "bulk":
         {
            "table":"test",
            "_id":0,
            "created":0,
            "deleted":2,
            "updated":0,
            "result":"created",
            "status":201
         }
      }
   ],
   "errors":false
}
Last modified: August 28, 2025