Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Elasticsearch深入:索引中Deleted操作

Elasticsearch深入:索引中Deleted操作

原创
作者头像
HLee
修改于 2021-11-10 02:16:05
修改于 2021-11-10 02:16:05
1.6K00
代码可运行
举报
文章被收录于专栏:房东的猫房东的猫
运行总次数:0
代码可运行

简介

Head 插件索引文档数显示结果不一致

索引中大量文档状态是 deleted

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "_shards":{
        "total":12,
        "successful":12,
        "failed":0
    },
    "_all":{
        "primaries":{
            "docs":{
                "count":94830,
                "deleted":13143
            },
            "store":{
                "size_in_bytes":1838486334,
                "throttle_time_in_millis":0
            },
            "refresh":{
                "total":8678,
                "total_time_in_millis":54815
            },
            "flush":{
                "total":1831,
                "total_time_in_millis":103795
            },
            "query_cache":{
                "memory_size_in_bytes":428848,
                "total_count":770522,
                "hit_count":271827,
                "miss_count":498695,
                "cache_size":211,
                "cache_count":279,
                "evictions":68
            },
            "segments":{
                "count":96,
                "memory_in_bytes":2944151,
                "terms_memory_in_bytes":2510183,
                "stored_fields_memory_in_bytes":118080,
                "term_vectors_memory_in_bytes":194392,
                "norms_memory_in_bytes":62912,
                "doc_values_memory_in_bytes":58584,
                "index_writer_memory_in_bytes":0,
                "index_writer_max_memory_in_bytes":3072000,
                "version_map_memory_in_bytes":0,
                "fixed_bit_set_memory_in_bytes":0
            },
            "translog":{
                "operations":1,
                "size_in_bytes":303
            },
            "recovery":{
                "current_as_source":0,
                "current_as_target":0,
                "throttle_time_in_millis":269174
            }
        }
    }
}

Deleted 本质

  • _id 代表的唯一 id
  • _version 代表的文档的版本号
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT test/_doc/1
{
    "counter" : 1,
    "province" : "北京"
}

结果:
{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 10,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "1",
        "_version" : 1, # 版本号
        "_score" : 1.0,
        "_source" : {
          "counter" : 1,
          "province" : "北京"
        }
      }
    ]
  }
}

此时查看文档的version都是1,假如我们再次执行一下更新id为1的文档:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT test/_doc/1
{
    "counter" : 1,
    "province" : "北京"
}

结果:
{
  "_index" : "test",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2, # 版本号变为了2
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 2,
  "_primary_term" : 1
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET test/_stats

# "count" : 0, "deleted" : 1

假如执行 delete 操作后,看下 version 结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DELETE test/_doc/1

{
  "_index" : "test",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 3,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 7,
  "_primary_term" : 1
}

# "count" : 0, "deleted" : 2

由此,初步得出结论:更新、删除操作实际是在原来文档的基础上版本号 + 1,且每执行一次,版本号 +1 一次。同时,原来的老版本的文档标记为deleted 状态。

文档删除本质

删除文档本质:逻辑删除而非物理删除。在执行删除文档后,待删除文档不会立即将文档从磁盘中删除,而是将文档标记为已删除状态(版本号 _version + 1, "result" 标记为:"deleted",)。最直观的反应就是被经常问到的问题“怎么删除文档后,磁盘空间不降?”随着不断的索引更多的数据,Elasticsearch 将会在后台清理标记为已删除的文档。

如果想要从磁盘上删除,需要借助段合并来实现,具体实践参考:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST test/_forcemerge?only_expunge_deletes

段合并中参数:“only_expunge_deletes“ 的含义只清除已标记为 deleted 的文档。

文档更新本质

更新文档的本质:delete + add。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In Lucene, the core engine of Elasticsearch, inserting or updating a document has thesame cost: in Lucene and Elasticsearch, to update means to replace.

表面上是更新,实际上是:Elasticsearch 将旧文档标记为已删除(deleted),并增加(add)一个全新的文档。同删除文档一样,旧文档不能被访问,但,旧文档不会被立即物理删除,除非手动或者定时执行了段合并操作。

索引删除本质

索引删除本质:物理删除数据。不同于删除文档,删除索引意味着删除其分片、映射和数据。索引删除会更直接、快速、暴力。删除索引后,与索引有关的所有数据将从直接从磁盘中删除。

索引删除包含两个步骤:

  • 更新集群
  • 分片从磁盘删除
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
删除索引操作:
DELETE test

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Elasticsearch 中为什么会有大量文档插入后变成 deleted?
数据库读数据,批量插入到es里,id自定义用的数据库的主键值,批量插入后,没有报错,可是用cerebro看,大量文档的状态是deleted,数据库中的主键值百分百没有重复的,不知道为什么会这样?
铭毅天下
2021/02/03
3K0
Elasticsearch 中为什么会有大量文档插入后变成 deleted?
Elasticsearch(二)——Rest API
RESTful 接口 URL 的格式是: http://cluster的地址: 9200/<index>I<type>I [<id>] 其中,index, type 是必须提供的( index 可以理解为数据库;type 理解为数据表); id 是可选的(相当于数据库表中记 录的主键是唯一的。如果不提供, Elasticsearch 会向动生成。增 、删、改,查分别对应 HTTP 请求的 PUT 、DELETE、POST、GET方法。
羊羽shine
2019/05/29
1.3K0
Elasticsearch 7.x:3、文档管理
(2)不指定文档ID 添加文档时可以不指定文档id,则文档id是自动生成的字符串。注意,需要使用POST方法,而不是PUT方法。
程裕强
2019/05/27
2K0
elasticsearch实战三部曲之二:文档操作
版权声明:欢迎转载,请注明出处,谢谢。 https://blog.csdn.net/boling_cavalry/article/details/86379882
程序员欣宸
2019/05/29
5600
【Elasticsearch系列八】高阶使用
含义:插入数据时的所有字段和值。在 get 获取数据时,在 source 字段中原样返回。
kwan的解忧杂货铺
2024/09/16
1380
Elasticsearch从入门到放弃:文档CRUD要牢记
在Elasticsearch中,文档(document)是所有可搜索数据的最小单位。它被序列化成JSON存储在Elasticsearch中。每个文档都会有一个唯一ID,这个ID你可以自己指定或者交给Elasticsearch自动生成。
Jackeyzhe
2020/03/11
7570
elasticsearch之crud
post:带id不存在则新增,存在则覆盖(全量更新),不带id永远新增,且自动生成id
九转成圣
2024/04/10
1290
Elasticsearch Index Monitoring(索引监控)之Index Stats API详解
本文将详细介绍Elasticsearch Index Monitoring监控命令之Index Stats API。
丁威
2019/06/11
4.5K0
Elasticsearch Index Monitoring(索引监控)之Index Stats API详解
ES07# Elasticsearch索引指标梳理
前面梳理了集群和节点的指标,索引指标也很重要。含义说明与前面有重复,只不过是在索引级别。还是撸一遍,索引状态命令GET my-index/_stats。文章主要内容有:
瓜农老梁
2022/06/23
7070
ElasticSearch 6.x 学习笔记:7.文档
(2)term查询 term查询用于查找指定字段中包含指定分词的文件,只有当查询分词和文档中的分词精确匹配时才被检索到。
程裕强
2022/05/06
5030
ElasticSearch 6.x 学习笔记:7.文档
Elastic学习之旅(4)ES文档CRUD操作
和MongoDB一样,文档的CRUD是我们学习ES的必备操作,下图展示了ES文档的CRUD概要:
Edison Zhou
2024/02/26
2210
Elastic学习之旅(4)ES文档CRUD操作
Elasticsearch 的简单使用
关于安装就不多说了,以前的版本安装起来还停麻烦,需要你预先 安装 JDK,但是 Elasticsearch 7 及以后的版本相对来说 安装非常简单,内置一个 OpenJDK,只需要下载 Elasticsearch 的安装包、解压、运行即可
hedeqiang
2019/12/18
9180
Elasticsearch 的简单使用
Python elasticsearch-py类库基础用法
https://files.pythonhosted.org/packages/f5/71/45d36a8df68f3ebb098d6861b2c017f3d094538c0fb98fa61d4dc43e69b9/urllib3-1.26.2-py2.py3-none-any.whl#sha256=d8ff90d979214d7b4f8ce956e80f4028fc6860e4431f731ea4a8c08f23f99473
授客
2024/01/29
4040
ElasticSearch 基本操作
REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。
用户9615083
2022/12/25
7970
ElasticSearch 基本操作
ElasticSearch学习(二)——索引、文档简单操作
在Postman中发PUT请求:http://127.0.0.1:9200/index_name
传说之下的花儿
2023/04/16
5790
ElasticSearch学习(二)——索引、文档简单操作
探究 | Elasticsearch如何物理删除给定期限的历史数据?
想到删除,基础认知是delete,细分为删除文档(document)和删除索引;要删除历史数据,基础认知是:删除了给定条件的数据,用delete_by_query。 实际操作发现:
铭毅天下
2018/07/26
5K1
ElasticSearch核心概念和文档的CRUD
Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。
海向
2019/09/23
5900
ElasticSearch教程_Elasticsearch原理
Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎。
全栈程序员站长
2022/09/19
1.9K0
ElasticSearch教程_Elasticsearch原理
Elasticsearch 索引容量管理实践
Elasticsearch是目前大数据领域最热门的技术栈之一,腾讯云 Elasticsearch Service(ES)是基于开源搜索引擎 Elasticsearch 打造的高可用、可伸缩的云端全托管 Elasticsearch 服务,完善的高可用解决方案,让业务可以放心的把重要数据存储到腾讯云 ES 中。
腾讯云大数据
2021/01/07
1.1K0
Elasticsearch 索引容量管理实践
Elasticsearch深入:字段的存储
在 Elasticsearch 中,通常每个文档的每一个字段都会被存储在 shard 里存放 source 的地方,比如:
HLee
2021/01/04
2.2K0
Elasticsearch深入:字段的存储
相关推荐
Elasticsearch 中为什么会有大量文档插入后变成 deleted?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验