Manticore Search 文档删除操作详解

Manticore Search 文档删除操作详解

manticoresearch manticoresoftware/manticoresearch: 这是一个用于快速搜索和索引数据的搜索引擎。适合用于需要快速搜索和索引数据的场景。特点:易于使用,支持多种数据格式,具有高性能和可扩展性。 manticoresearch 项目地址: https://gitcode.com/gh_mirrors/ma/manticoresearch

概述

Manticore Search 提供了多种方式来删除索引中的文档,支持通过 SQL 和 JSON 接口进行操作。本文将详细介绍各种删除文档的方法、适用场景以及最佳实践。

删除操作支持的表类型

删除文档操作仅支持以下表类型:

  1. 实时表(Real-time tables)
  2. 预查询表(Percolate tables)
  3. 分布式表(仅包含 RT 表作为本地或远程代理的情况)

删除方式

1. 按 ID 删除

这是最简单的删除方式,直接指定文档 ID 进行删除。

SQL 示例
DELETE FROM test WHERE id=1;
JSON 示例
{
    "table": "test",
    "id": 1
}

2. 按条件删除

可以使用复杂的查询条件来删除匹配的文档。

SQL 示例
DELETE FROM test WHERE MATCH('test document') AND (mva1>206 OR mva1 IN (100, 103));
JSON 示例
{
    "table": "test",
    "query": {
        "match": { "*": "test document" }
    }
}

3. 批量删除 ID

可以一次删除多个 ID 对应的文档。

SQL 示例
DELETE FROM test WHERE id IN (1,2,3);
JSON 示例
{
    "table": "test",
    "id": [1,2,3]
}

集群环境下的删除

在复制集群环境中删除文档时,需要指定集群名称。

SQL 示例
DELETE FROM cluster:test WHERE id=100;
JSON 示例
{
    "cluster": "cluster",
    "table": "test",
    "id": 100
}

批量删除操作

Manticore Search 支持通过 /bulk 端点执行批量删除操作,使用 NDJSON 格式。

批量删除示例
POST /bulk
Content-Type: application/x-ndjson

{ "delete": { "table": "test", "id": 1 } }
{ "delete": { "table": "test", "query": { "equals": { "int_data": 20 } } } }

响应示例:

{
   "items": [
      {
         "bulk": {
            "table":"test",
            "_id":0,
            "created":0,
            "deleted":2,
            "updated":0,
            "result":"created",
            "status":201
         }
      }
   ],
   "errors":false
}

性能考虑

  1. 按 ID 删除是最快的:直接通过 ID 删除文档(如 id=Nid IN (X,Y))是最快的删除方式,因为它不需要执行搜索操作。

  2. 清空表推荐使用 TRUNCATE:如果需要删除表中所有文档,使用 TRUNCATE TABLE 比删除操作要快得多。

  3. 批量操作效率更高:当需要删除大量文档时,使用批量接口比单条删除更高效。

响应格式

成功的删除操作会返回以下信息:

  • SQL 接口:返回受影响的行数
  • JSON 接口:返回包含操作结果的 JSON 对象

典型 JSON 响应:

{
    "table": "test",
    "deleted": 2,
    "result": "deleted"
}

多语言示例

Manticore Search 提供了多种编程语言的客户端支持,以下是不同语言的删除操作示例:

PHP

$index->deleteDocument(1);  // 按 ID 删除
$index->deleteDocuments(new MatchPhrase('test document','*'));  // 按条件删除

Python

indexApi.delete({"table": "test", "id": 1})  # 按 ID 删除
indexApi.delete({"table": "test", "query": {"match": {"*": "test document"}}})  # 按条件删除

Java

DeleteDocumentRequest deleteRequest = new DeleteDocumentRequest();
deleteRequest.index("test").setId(1L);  // 按 ID 删除
indexApi.delete(deleteRequest);

C#

DeleteDocumentRequest deleteRequest = new DeleteDocumentRequest(index: "test", id: 1);
indexApi.Delete(deleteRequest);

总结

Manticore Search 提供了灵活多样的文档删除方式,开发者可以根据具体场景选择最适合的方法。对于性能敏感的应用,建议优先使用按 ID 删除或批量删除操作。在需要清空整个表时,使用 TRUNCATE 命令可以获得最佳性能。

manticoresearch manticoresoftware/manticoresearch: 这是一个用于快速搜索和索引数据的搜索引擎。适合用于需要快速搜索和索引数据的场景。特点:易于使用,支持多种数据格式,具有高性能和可扩展性。 manticoresearch 项目地址: https://gitcode.com/gh_mirrors/ma/manticoresearch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲍丁臣Ursa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值