删除文档

删除文档仅在以下表类型的RT模式中支持:

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

您可以根据文档的 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 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)

这是在集群 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