ElasticSearch复制index数据,如何修改索引字段

ES修改mapping映射type或全部结构 测试服务器一套ES,正式服务器一套ES,突然正式网的搜索开始出问题了,然后就像把测试网的ES映射直接导到正式网,因为一开始维护ES的人已经离职了,所以正式网和测试网映射结构有些不一样的时候,不确定是不是这个原因导致的,所以就打算先把测试网的映射结构拿过来,看看是不是这个原因,于是有了下面一系列操作,并不影响数据,只是把测试网映射搬到正式网而已。(只有当想要修改映射中的type时才需要这样做,如果只... 阅读详情

一、需求

当es字段类型无法支撑业务需求,需要修改到字段类型的时候。例如修改字段类型从Integer变成double,这种情况下,是没办法修改es的字段的type的。

原因是一个字段的类型进行修改之后,ES会重新建立对这个字段的索引信息,ElasticsSearch的底层是Lucene库,字段类型修改会涉及到分词方式,相关度,TF/IDF等倒排的生成 , 所以是没办法修改的了。

这种情况下,如何能兼容旧数据的同时,实现修改字段类型?

二、如何实现:es的reindex

实现原理:通过es的reindex功能把旧索引的数据reindex到新索引,然后为新索引建立旧索引的别名,最后删除旧索引。

下面以重构:idt-shelf-2265-index-202003 下的 shelf_sub_job 中的Integer字段变为double为例子

  1. 新建一个索引:idt-shelf-2265-index-202003-temp (注:该索引下的数据表type和原索引保持一致。其中,新索引中的字段属性已修改为double)
    *可通过EsIndexService类创建一个新的索引。
     
  2. 执行reindex操作,把旧索引的数据复制到新索引:
    POST _reindex                    
    {
      "source": {
        "index": "idt-shelf-2265-index-202003"
      },
      "dest": {
        "index": "idt-shelf-2265-index-202003-temp"
      }
    }
    执行该操作后,可以在kibana上面查看进度:
     
  3. 删除旧索引:
    DELETE idt-shelf-2265-index-202003
    
     
    
     
  4. 修改新索引的别名为“idt-shelf-2265-index-202003”:
      POST /_aliases
      {
            "actions": [
                {"add": {"index": "idt-shelf-2265-index-202003-temp", "alias":idt-shelf-2265-index-202003"}}
            ]
      }

三、查询reIndex进度、终止reIndex

  • 查询reIndex进度

    GET _tasks?detailed=true&actions=*reindex

  • 取消reIndex任务

    POST _tasks/node_id:task_id/_cancel

 

四、提升reIndex速度

从第二步能看出,reindex速度非常慢,每秒只有200条数据。

提升reindex的几个点:

(1)修改批量大小值

默认情况下,_reindex使用1000进行批量操作,您可以在source中调整batch_size

POST _reindex
{
"source": {
"index": "source",

"query":{}
"size": 5000
},
"dest": {
"index": "dest",
"routing": "=cat"
}
}

(2)ES副本数设置为0

我们看下一个文档被创建的流程:

一个创建请求,在主分片创建了文档后,会转发请求到副本所在到节点,待副本创建成功后,才返回给客户端。

所以在reindx的时候,提升速度,可以考虑把副本数设置为0,待reindex成功后,再设置为1,es会自动建立副本。

PUT /idt-shelf-2265-index-202003-temp/_settings
{
         "number_of_replicas": 0
}

如下效果,副本数设置为0后,主分片的速率得到了很大的提升。

(reindex完毕后,要记得设置副本数~)

 

 

(3)修改Refresh的间隔时间 

如果你的搜索结果不需要近实时的准确度,考虑把每个索引的 index.refresh_interval改到 30s 。如果你是在做大批量导入,导入期间你可以通过设置这个值为 -1 关掉刷新。别忘记在完工的时候重新开启它。

PUT /idt-shelf-2265-index-202003-temp/_settings
{

"refresh_interval": -1

}

如下效果图,我把刷新时间设置为120s比30s效果要好,但设置为关闭刷新,反而效果变差了??

 

 

五、安全考虑

1、进行以上操作的时候,建议先对索引建立快照备份。

2、reindex操作前考虑清楚,一来太耗时了,二来reindex过程中,原索引新增的数据,是没有被reindex过去,看看reindex的原理就是明白,用的是scroller

Es的text和keyword类型以及如何修改类型 昨天同事触发定时任务发现es相关服务报了一个序列化问题,今天早上捕获异常将异常堆栈全部打出来看,才发现是聚合的字段不是keyword类型的问题。到kibbna命令行执行也是一样的错误使用 /_mapping查看索引的字段类型,才发现userUniqueid是text类型如果用text执行聚合,还必须在字段名后面加上 userUniqueid.keyword才能聚合。需要重新建索引,指定类型!这里说说text和keyword的区别。 阅读详情

相关推荐

实时搜索引擎Elasticsearch(1)——基础概念、安装和运行

Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。本文介绍它的基础概念、安装、运行以及配置。

HinyLover的专栏 2万+

es修改搜索结果的指定字段

1、原生语句 POST /infomations/infomations/_update_by_query JSON请求格式 { "query": { "match": { "status": "UP_SHELF" } }, "script": { "inline": "ctx._source['s...

goxingman的博客 5506

Kibana修改es已存在index字段

1、#查看index映射和数据 GET account/_search 2、查看原先index maping结构 GET account/_mapping 3、#根据原先index,create 一个新的index,修改响应字段 1)将原有的setting中的名称和创建时间、uuid等删除掉,copy过来 2)将原有的mapping中需要修改的字段修改后copy多来 PUT account_20210610_1641 { “settings”: { “index”: { “number_of_shard

m0_37856386的博客 1718

ES 新增字段和删除字段、修改字段值

es 删除、新增、修改

Wang_Pink的博客 4033

逆向淘宝x-mini-wua:从加密算法到设备指纹的生成逻辑

本文深入剖析了淘宝风控核心参数x-mini-wua的生成逻辑与加密算法。通过逆向分析,揭示了其作为设备“身份证”的作用,详细拆解了从硬件信息采集、SG_INNER_DATA文件解密、关键参数提取到最终长wua合成的完整技术链条,并探讨了模拟生成与绕过风控的实战思路及注意事项。

year5的博客 1074

基于云盾构建等保三级Web安全体系:从合规要求到实战落地

网络安全等级保护(等保)是保障信息系统安全的重要制度,其核心原理是通过分级防护、动态调整的策略,构建纵深防御体系。在技术层面,等保要求覆盖物理环境、通信网络、区域边界、计算环境和安全管理中心等多个层面,旨在通过技术和管理相结合的方式,有效应对网络攻击和数据泄露风险。对于Web应用而言,满足等保三级要求具有极高的技术价值,它不仅是合规的刚性需求,更是提升业务系统整体安全水位、建立用户信任、保障业务连续性的关键工程实践。在云计算时代,利用云原生安全服务(如Web应用防火墙WAF、云安全中心、态势感知等)可以高效

weixin_29324877的博客 304

es 修改字段的值

如何手动修改es内容的值呢?给某个字段赋值,或是字段间进行赋值 用script http://127.0.0.1:9200/car_statics_index/_update_by_query { "script": { "inline": "ctx._source.form_serial = ctx._source.form_data.ORDER_NUM" }, "query": { "terms": { "data_...

一路向前 7558

【液晶专题】从外挂到In-Cell/ On-Cell/ OGS再也不会傻傻分不清楚了

触控技术经历了从外挂式到内嵌式的革新,主要方案包括外挂式(Out-Cell)、OGS、On-Cell和In-Cell。

一点硬件 1252

es索引库操作

es索引库操作

qq_44760653的博客 824

高频面试题-项目介绍篇

聊聊如何介绍项目经历。

m0_73359763的博客 1908

Docker一键部署Synopsys EDA全家桶(VCS/Verdi 2018版)保姆级教程

本文提供了一份详尽的Docker容器化部署Synopsys EDA工具链(VCS/Verdi 2018版)的保姆级教程。通过环境隔离与标准化,解决传统安装的依赖冲突问题,并重点攻克了容器内GUI图形界面显示的核心难题。教程涵盖从Docker基础安装、镜像获取、容器启动配置,到使用X11转发或VNC实现Verdi完美显示的完整实践,旨在帮助芯片设计工程师快速构建稳定、可移植的一键化EDA工作环境。

weixin_29281941的博客 196

day72 -全文检索-ElasticSearch-进阶- 映射的查询,创建与修改

前言 7已经把类型概念作为过期内容,8将彻底废弃,以后一个索引就一个类型,原因如下 1.查询 GET /索引名/_mapping 2.新增 3.修改 起始不存在修改,因为字段已经绑定上数据,修改了映射类型算啥? 所以只能创建新的索引,然后做数据的迁移 (1)新索引的创建 类似如下,其中index属性置为false时,该字段将不能索引文档 (2)数据的迁移 ...

JavaCoder_juejue的博客 219

OpenCV 基于上升距离计算边缘清晰度

OpenCV 基于上升距离计算边缘清晰度

dayuhaitang1的博客 252

Elasticsearch — 索引(Mapping Index)

摘要: Elasticsearch的Mapping定义了索引数据结构,包含字段名称、类型、属性等,类似关系型数据库的表结构。Mapping核心是Properties,支持动态映射(Dynamic Mapping)和显式映射(Explicit Mapping)。索引由分片组成,支持水平扩展。字段类型包括文本、数字、日期等,Analyzer用于文本分析。Index Settings控制索引行为,分为静态和动态设置。文档路由算法决定数据存储位置,主分片数量不可修改。写操作需主分片成功后再复制到副本分片,读操作可来

weixin_38436441的博客 1391

7.1华为OD机试真题 新系统 - 仓库盘点 (Java/Py/C/C++/Js/Go)

7.1华为OD机试真题 新系统 - 仓库盘点 (Java/Py/C/C++/Js/Go)

算法大师! 505

YOLOv8-Pose 姿态识别 RK3588 实战:从模型训练到 RKNN 部署,精度与推理速度双提升

本教程从YOLOv8-pose模型的姿态识别训练,到RK3588的边缘量化部署,为你打造了一套“高精度+高实时性+低成本”的人体姿态分析解决方案。无论是健身动作纠正、智能安防行为检测,还是工业人员姿态监控,这套技术都能直接复用——你只需替换数据集与业务逻辑,即可快速落地专属的边缘AI姿态识别系统。如果你在实践中遇到任何卡点,欢迎随时交流。记住,人体姿态识别的价值在于“关键点准、推理快、部署易”,而这三者的平衡,正是你通过本教程能掌握的核心能力。

FJN110的博客 362

Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica

当我们开始使用Elasticsearch时,我们必须理解其中的一些重要的概念。这些概念的理解对于以后我们使用Elastic栈是非常重要的。在今天的这篇文章里,我们先来介绍一下在Elastic栈中最重要的一些概念。 首先,我们来看下一下如下的这个图: Cluster Cluster也就是集群的意思。Elasticsearch集群由一个或多个节点组成,可通过其集群名称进行标识。通常这个........................

Elastic 中国社区官方博客 3万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

es修改mapping字段类型_一文搞懂 Elasticsearch 之 Mapping

这篇文章主要介绍 Mapping、Dynamic Mapping 以及 ElasticSearch 是如何自动判断字段的类型,同时介绍 Mapping 的相关参数设置。首先来看下什么是 Mapping:什么是 Mapping?在一篇文章带你搞定 ElasticSearch 术语中,我们讲到了 Mapping 类似于数据库中的表结构定义 schema,它有以下几个作用:定义索引中的字段的名称定义字段...

weixin_39864101的博客 654

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ElasticSearch索引复制Reindex

环境: 阿里云ElasticSearch6.7 情景: ElasticSearch的索引mapping由于不满足生产需求,需要重建mapping 例如:将字段dt 的数据类型由 keyword 改成 long 类型 实现方法: 原索引mapping PUT /ads_lading_trade_detail_es?pretty { "settings": { "index": { "number_of_shards": "6", "blocks": {

学无止境,永不停歇 973

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

es index 改名,将字段重命名为Elasticsearch中的新索引

I have an index with this mapping:curl -XPUT 'http://localhost:9200/origindex/_mapping/page' -d '{"page" : {"properties" : {"title" : {"type" : "text"},"body" : {"type" : "text"},"other": {"type": "te...

weixin_30783947的博客 940

【Elasticsearch】——Index Templates(索引模板)

一、前言 索引模板,简而言之,是一种复用机制。当新建一个 Elasticsearch 索引时,自动匹配模板,完成索引的基础部分搭建。注意:模板只在创建索引时应用。更改模板不会对现有索引产生影响。主要为如下几个部分: { "order": 0, // 模板优先级 "template": "sample_info*", ...

汤庆 2803

elasticsearch中重新索引数据

参考:https://www.phpmianshi.com/?id=170 概念 虽然你可以给索引添加新的类型,或给类型添加新的字段,但是你不能添加新的分析器或修改已有字段。假如你这样做,已被索引的数据会变得不正确而你的搜索也不会正常工作。 修改在已存在的数据最简单的方法是重新索引:创建一个新配置好的索引,然后将所有的文档从旧的索引复制到新的上。 _source 字段的一个最大的好处是你已经在 Elasticsearch 中有了完整的文档,你不再需要从数据库中重建你的索引,这样 ...

tiancityycf的专栏 585

Elasticsearch之Index Setting:索引的静态配置与动态配置

索引的配置项按是否可以更改分为静态配置与动态配置,所谓的静态配置即索引创建后不能修改。

智者千虑,必有一失;愚者千虑,必有一得。 3093

Elasticsearch 超大索引拆分策略(Index Splitting Strategy)设计方案

Elasticsearch超大索引拆分策略摘要 针对Elasticsearch中百GB/TB级超大索引的性能瓶颈问题,本文提出两种核心拆分方案: Split Index(推荐) 快速将分片按2的幂次分裂(1→2/4/8) 保留倒排索引结构,分钟级完成 需临时设置索引为只读状态 Reindex(通用) 支持任意分片数调整和结构修改 通过切片并行迁移提升效率 需配合别名实现无缝切换 关键实践: 拆分后单分片建议10-50GB 优先采用routing维度拆分(如多租户) 必须使用别名保证业务透明访问 自动化监控+

csdn_tom_168的博客 788

Elasticsearch常用命令汇总

创建数据库表需要设置字段名称,类型,长度,约束等;在ES中创建一个索引,就相当于在mysql中创建了一个数据库,而mysql中的数据库肯定是不能重复的,也即ES中的索引也不能重复,所以这是一个幂等性操作,需要发送PUT请求(如果重复发送PUT请求、重复添加索引,会返回错误信息),这里不能发送POST请求。因为name字段是 支持 text 模式查询,即支持 分词、拆解 操作,做倒排索引,所以虽然文档中的name字段为张起灵,但是经过分词拆解,name为 张、起、灵、起灵 这几种都可以查询出数据。

baidu_34793212的博客 7055

搜索引擎之Elasticsearch的快速入门

我们在学习elasticsearch的核心概念之前,回顾下我们使用传统数据库查询数据的时候应该怎么做的?假设我们使用mysql数据库存储一些数据,我们的操作步骤是怎样的? 建立数据库->建表->插入数据->查询 elasticsearch的主要概念 索引(index) 一个索引可以理理解成一个关系型数据库 类型(type) 一种type就像一类表,比如user表,order表 注意: ES 5.x中一个index可以有多种type ES 6.x中一个index只能有一种

vincent_wen0766的博客 519
上一篇: es只返回_source里的内容、去掉_index、_type等外围字段
下一篇: elasticsearch查询时不区分大小写
nddjava
博客等级 码龄16年 15粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值