Manticore Search 文档删除操作详解
概述
Manticore Search 提供了多种方式来删除索引中的文档,支持通过 SQL 和 JSON 接口进行操作。本文将详细介绍各种删除文档的方法、适用场景以及最佳实践。
删除操作支持的表类型
删除文档操作仅支持以下表类型:
- 实时表(Real-time tables)
- 预查询表(Percolate tables)
- 分布式表(仅包含 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
}
性能考虑
-
按 ID 删除是最快的:直接通过 ID 删除文档(如
id=N
或id IN (X,Y)
)是最快的删除方式,因为它不需要执行搜索操作。 -
清空表推荐使用 TRUNCATE:如果需要删除表中所有文档,使用
TRUNCATE TABLE
比删除操作要快得多。 -
批量操作效率更高:当需要删除大量文档时,使用批量接口比单条删除更高效。
响应格式
成功的删除操作会返回以下信息:
- 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 命令可以获得最佳性能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考