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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch 中的骚操作你确定不看看?

1.索引备份迁移

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

请求方式:POST

请求 API

_reindex
1. {
2.   "source": {
3.     "index": "要备份的索引名"
4.   },
5.   "dest": {
6.     "index": "新建的索引名"
7.   }
8. }

如果新索引中有数据,且 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":"字段类型"
                }
            }
        }
    }
}
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
5月前
|
索引
ElasticSearch 报错及解决 详细 0405【已解决】
ElasticSearch 报错及解决 详细 0405【已解决】
425 4
|
Java Linux 索引
ElasticSearch常见的报错及解决
ElasticSearch常见的报错及解决
601 0
|
6月前
|
存储 数据可视化 数据挖掘
【ElasticSearch】ElasticSearch安装
【ElasticSearch】ElasticSearch安装
74 2
|
4月前
|
存储 搜索推荐 数据可视化
【Elasticsearch】Elasticsearch索引创建与管理详解
【Elasticsearch】Elasticsearch索引创建与管理详解
459 10
|
6月前
|
缓存 自然语言处理 数据挖掘
一篇文章让你学会Elasticsearch中的查询
一篇文章让你学会Elasticsearch中的查询
137434 118
|
存储 搜索推荐 Java
Elasticsearch的配置学习笔记
Elasticsearch是一个基于Lucene的搜索服务器。它提供一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,Elasticsearch是用Java语言开发的。
76 0
|
SQL 自然语言处理 Java
【ElasticSearch系列-01】初识以及安装elasticSearch
【ElasticSearch系列-01】初识以及安装elasticSearch
188 0
|
JSON 数据格式 网络架构
【Elasticsearch】文档操作
【Elasticsearch】文档操作
78 0
|
SQL 关系型数据库 MySQL
elasticsearch常用应用操作
elasticsearch常用应用操作,会批量从mysql批量导入数据。 会解决一些mysql不太好写的sql语句,如搜索多模糊查询。
126 1
|
存储 Docker 索引
elasticsearch学习四:elasticsearch集群
elasticsearch学习四:elasticsearch集群
263 0
elasticsearch学习四:elasticsearch集群