从多个方面用法介绍ES删除索引数据(ES删除索引中的所有数据)

一、 相关概念介绍

在学习ES删除索引数据前,我们需要先了解以下几个概念:

1.1 索引

ES中的索引可以理解为关系型数据库中的“数据库”,索引中的每个文档类比于关系型数据库中的“表”。

1.2 文档

文档是ES中存储的最小单位,类比于关系型数据库中的“行”,文档可以是任意格式的JSON文本,可以包含任意多层嵌套的字段。

1.3 类型

在ES 6.0版本以后,每个索引只有一个类型。类型在ES 7.0版本中已经被废弃,但为了向后兼容,ES仍然提供了默认类型”_doc”。

1.4 路由

路由是ES中文档的分片算法,通过对文档的某个字段进行哈希运算的方式,将文档分配到对应的分片上。

二、 删除索引数据

ES提供了通过API删除索引数据的方式,支持单个文档的删除,也支持按照条件查询结果集后进行删除。

2.1 删除单个文档

ES提供了delete API来删除单个文档。使用该API,我们需要提供要删除文档的索引名称,类型名称和文档ID三个参数。

DELETE /index_name/type_name/document_id

例如,要删除名为”my_index”,类型为”_doc”,ID为”1″的文档,我们可以使用下面的代码:

DELETE /my_index/_doc/1

如果成功删除文档,返回结果会带有下面的信息:

{
    "_index": "my_index",
    "_type": "_doc",
    "_id": "1",
    "_version": 2,
    "result": "deleted",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 1,
    "_primary_term": 1
}

2.2 删除满足条件的文档

除了单个文档的删除,ES还提供了delete by query API,通过查询条件删除满足条件的文档。

POST /index_name/_delete_by_query
{
    "query": {
        "match": {
            "key": "value"
        }
    }
}

例如,要删除”my_index”索引中,属性”age”小于30的文档,我们可以使用下面的命令:

POST /my_index/_delete_by_query
{
    "query": {
        "range": {
            "age": {
                "lt": 30
            }
        }
    }
}

如果满足条件的文档删除成功,返回的结果包含下面的信息:

{
    "took": 3308,
    "timed_out": false,
    "total": 2000,
    "deleted": 2000,
    "batches": 1,
    "version_conflicts": 0,
    "noops": 0,
    "retries": {
        "bulk": 0,
        "search": 0
    },
    "throttled_millis": 0,
    "requests_per_second": -1.0,
    "throttled_until_millis": 0,
    "failures": []
}

三、 删除索引

在实际情况中,通常我们会有删除整个索引的需求,例如清空缓存,重建索引等等。ES中提供了delete index API来删除整个索引。

DELETE /index_name

例如删除名为”my_index”的索引:

DELETE /my_index

如果成功删除索引,返回结果会带有下面的信息:

{
  "acknowledged": true
}

四、 删除索引的一些注意事项

在删除索引时,需要注意下面的问题:

4.1 确认操作后再进行删除

删除索引操作是不可逆的行为,必须在确认此操作之后执行。在使用HTTP API执行删除操作时,必须明确设置头 “Content-Length: 0″。

4.2 删除索引会删除所有数据

删除索引会删除索引中的所有文档,如果需要保存数据,请在删除之前备份数据。

4.3 删除数据会留下记录

使用delete API和delete by query API删除数据时,ES会在_translog日志中留下记录,以便在数据丢失时进行恢复,因此删除数据并不会立即腾出磁盘空间。

五、 总结

本文从相关概念介绍、删除单个文档、删除满足条件的文档、删除整个索引上分别展开了阐述。同时,我们也提醒了在删除索引时需要注意的问题。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平