删除文档

删除文档仅在实时模式中支持以下表格类型:

  • 实时 表格
  • Percolate 表格
  • 只包含实时表作为本地或远程代理的分布式表格。

您可以根据其ID或某些条件从表格中删除现有文档。

此外,批量删除可用于删除多个文档。

通过SQL和JSON接口均可实现文档的删除。

对于SQL,成功操作的响应将指示删除的行数。

对于JSON,使用json/delete端点。服务器将以JSON对象形式响应,指示操作是否成功以及删除的行数。

建议使用表清空而不是删除来从表中删除所有文档,因为这是一个更快的操作。

在这个示例中,我们从名为test的表中删除匹配全文查询test document的所有文档:

‹›
  • 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,
}

这里 - 从名为test的表中删除具有id等于1的文档:

‹›
  • 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"
}

这里,从名为test的表中删除具有id匹配值的文档:

注意,带有id=Nid 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的表中删除匹配全文查询test document且具有属性mva1的值大于206或mva1值为100或103的文档:

‹›
  • 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)

这是从集群cluster的表test中删除文档的一个示例。请注意,我们必须提供集群名称属性以及表属性以从复制集群内的表中删除行:

‹›
  • 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