前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch 中的骚操作你确定不看看?

Elasticsearch 中的骚操作你确定不看看?

作者头像
小闫同学啊
发布2019-10-23 19:55:43
4680
发布2019-10-23 19:55:43
举报
文章被收录于专栏:小闫笔记小闫笔记小闫笔记

1.索引备份迁移

众所周知,ES 中的 mapping 只能在索引建立初期进行创建,且建立之后不可更改。mapping 对应的字段会映射成指定类型,未定义字段则自动映射,一般为 text 类型。那么想更改索引名或者更改某字段的 mapping 时,是否就束手无策了呢?当然不是!!!官方提供了一个接口,供索引备份迁移操作使用,那便是 reindex。当旧索引与新索引在同一节点时,效率相当高,万条数据瞬间完成( 大约只需0.4s)。数百万数据也只需几分钟即可完成 操作,是不是很溜呢?快来学习一下吧。

请求方式:POST

请求 API _reindex

{
  "source": {
    "index": "要备份的索引名"
  },
  "dest": {
    "index": "新建的索引名"
  }
}

如果新索引中有数据,且 id 与旧索引中重复,那么会进行覆盖操作。

但是当数据量实在太大,高达几十 G 的时候,速度就会变得很慢,那是因为它底层还是利用了 scroll 操作。该如何进行优化呢?可以提升批量操作的文档数大小,如下:

{
  "source": {
    "index": "要备份的索引名",
    "size" : 5000
  },
  "dest": {
    "index"  : "新建的索引名",
    "routing": "=cat"
  }
}

批量操作大小是如何确定的呢?是根据文档数以及文档容量进行确定的。根据查阅资料得知,一个好的起点是每批处理数据 5-15 MB,这是个什么概念?

1000 个 1kb 的文档大约 1MB;1000 个 100kb 的文档是 100MB。

然后逐步增加每批处理数据容量,进行调优,直到最终性能无法再次提升。还有一个方法,那便是提升硬件,比如换固态,你懂得~

还有一种方法提升写入效率,这是终极操作,那便是 slicedreindex 支持 Sliced Scroll 操作。它的原理可以简单的理解为将每次的 Scroll 请求分解,分解后并行化请求,从而提升效率。方式为:

POST _reindex?slices=5&refresh
{
  "source": {
    "index": "要备份的索引名"
  },
  "dest": {
    "index": "新建的索引名"
  }
}

2.删除索引中指定的数据

请求方式:POST

请求 API _delete_by_query

{
    "query": {
        "match": {
            "字段名": "字段值"
        }
    }
}

方法便是先查出指定数据再删除。

3. 设置副本数、分片、动态映射

设置这些指标项可在建立 mapping 时一同设置。

{
    "settings":{
        "index":{
            // 刷新间隔
            "refresh_interval":"3s"
        },
        // 副本数
        "number_of_replicas":"0",
        // 切片(分布在每个节点上的切片)
        "number_of_shards":"1"
    },
    "mappings":{
        "_doc":{
            // 自动映射为 keyword 类型而不是默认的text类型
            "dynamic_templates":[
                {
                    "string_fields":{
                        "match":"*",
                        "match_mapping_type":"string",
                        "mapping":{
                            "type":"keyword",
                            "norms":false
                        }
                    }
                }
            ],
            // 建立mapping
            "properties":{
                "mydate":{
                    "type":"date",
                    "format":"yyyy/MM/dd HH:mm:ss||date_time||strict_date_time"
                },
                "字段名":{
                    "type":"字段类型"
                }
            }
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.索引备份迁移
    • 2.删除索引中指定的数据
      • 3. 设置副本数、分片、动态映射
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档