开发者社区 > 大数据与机器学习 > 检索分析服务 Elasticsearch版 > 正文

Elasticsearch中docs.deleted 这个里面的数据怎么彻底删掉呢?

Elasticsearch中docs.deleted 这个里面的数据怎么彻底删掉呢?

展开
收起
哈喽!小陈 2022-08-08 17:49:12 12913 2
4 条回答
写回答
取消 提交回答
  • 将军百战死,壮士十年归!

    在Elasticsearch中,docs.deleted是一个用于跟踪已删除文档数量的字段。删除文档并不会立即从磁盘中移除,而是被标记为已删除,并在docs.deleted字段中进行计数。如果你想彻底从磁盘中删除已删除的文档,可以考虑使用 force merge 操作。

    使用 force merge 操作,可以将索引段合并为一个,这样已删除的文档就会从磁盘中移除。请注意,force merge 是一个开销较大的操作,应该在非常需要的情况下才使用,因为它可能会影响性能。

    以下是使用 Elasticsearch API 进行 force merge 的示例:

    curl -XPOST "localhost:9200/your_index/_forcemerge?max_num_segments=1"
    

    在上述示例中,将your_index替换为你的索引名称。这个操作将合并索引段,将max_num_segments参数设置为1,以确保所有段都被合并成一个。

    请注意,force merge 操作可能会导致一些性能开销,因此建议在非繁忙时段执行。此外,force merge 不是必需的操作,只有在你确信需要清理已删除文档并且索引已经不再进行写入操作时才应该使用。

    2024-01-05 09:41:49
    赞同 展开评论 打赏
  • 您可以使用以下命令来删除Elasticsearch中的docs.deleted数据:

    POST /_delete_by_query
    {
      "query": {
        "term": {
          "deleted": true
        }
      }
    }
    

    这将逻辑删除所有已标记为deleted的文档。但是,这只是逻辑删除,磁盘空间仍然占用。只有当数据量达到一定时,段文件合并时,才可能物理删除。

    2023-09-15 12:21:22
    赞同 2 展开评论 打赏
  • CSDN全栈领域优质创作者,万粉博主;InfoQ签约博主;华为云享专家;华为Iot专家;亚马逊人工智能自动驾驶(大众组)吉尼斯世界纪录获得者

    在Elasticsearch中,要彻底删除一个文档(document)的数据,可以使用以下两个方法:

    1. 使用delete API删除文档数据:
    DELETE /my_index/_doc/<document_id>
    {
      "doc": {
        "field1": "value1",
        "field2": "value2"
      }
    }
    

    其中,<document_id>是要删除的文档的ID。此API将删除指定文档并释放相关存储空间。

    1. 在索引映射中设置 doc_as_upsert=true参数:
    PUT my_index/_mapping
    {
      "properties": {
        "<field_name>": {
          "type": "text",
          "doc_as_upsert": true
        }
      }
    }
    

    这会告诉Elasticsearch将每个文档视为更新而不是插入。当您向具有此属性的索引添加新文档时,如果该文档已存在,则它将被替换。如果您尝试插入一个已经存在的文档,则不会发生任何操作。因此,如果您要删除一个文档,只需将其插入到索引中即可。

    2023-05-18 08:18:19
    赞同 1 展开评论 打赏
  • Delete By Query 删除原理: Delete_by_query并不是真正意义上物理文档删除,而是只是版本变化并且对文档增加了删除标记。当我们再次搜索的时候,会搜索全部然后过滤掉有删除标记的文档。因此,该索引所占的空间并不会随着该API的操作磁盘空间会马上释放掉,只有等到下一次段合并的时候才真正被物理删除,这个时候磁盘空间才会释放。相反,在被查询到的文档标记删除过程同样需要占用磁盘空间,这个时候,你会发现触发该API操作的时候磁盘不但没有被释放,反而磁盘使用率上升了。 ②使用Delete By Query 删除API注意事项: 1, 一般生产环境中,使用该API操作的索引都很大,文档都是千万甚至数亿级别。索引大小在几百G甚至几个T,因此,这个操作建议在业务低峰期或者晚上进行操作,因为大数据量情况下删除的需要消耗较多的i/o CPU 资源,容易对生产集群造成影响。 2,在删除过程中要确定集群磁盘有一定的余量,因为标记删除需要占用磁盘空间。如果磁盘空间不够,这个操作的失败率还是很大的。 3,Delete By Query有很多配置参数,这里不详解,具体可以参考文档:

    ③_forcemerge 命令可强制进行segment合并,并删除所有标记为删除的文档。Segment merging要消耗CPU,以及大量的I/O资源,所以一定要在你的ElasticSearch集群处于维护窗口期间,并且有足够的I/O空间的(如:SSD)的条件下进行;否则很可能造成集群崩溃和数据丢失.<这个非常重要> 执行上面2个步骤,整个流程就基本操作完毕,其它工作交给系统自动完成。时间待定。期间你会发现,磁盘空间会有一个反复变化的过程,磁盘使用率会先增长,然后在删除释放空间这样一个过程。这个过程无需紧张,都是正常现象。 以上就是整个批量删除和强制段合并操作实列。 curl -X POST "127.0.0.1:9200/对应索引/_forcemerge 此答案整理自钉钉群“Elasticsearch中文技术社区”

    2022-08-08 18:16:34
    赞同 1 展开评论 打赏

阿里云检索分析服务Elasticsearch版兼容开源ELK功能,免运维全托管,提升企业数据检索与运维分析能力。

相关产品

  • 检索分析服务 Elasticsearch版
  • 热门讨论

    热门文章

    相关电子书

    更多
    阿里云Elasticsearch体系架构与特性解析 立即下载
    开源与云:Elasticsearch应用剖析 立即下载
    《Elasticsearch全观测解决方案》 立即下载