架构师系列-搜索引擎ElasticSearch(十)- 索引别名及重建

news2025/1/13 13:48:42

索引别名

别名,有点类似数据库的视图,别名一般都会和一些过滤条件相结合,可以做到即使是同一个索引上,让不同人看到不同的数据。

别名的作用

        在开发中,一般随着业务需求的迭代,较老的业务逻辑就要面临更新甚至是重构,对于es来说为了适应新的业务逻辑,就要对原有的索引做一些修改,比如对某些字段做调整。
        而做这些操作的时候,可能会对业务造成影响,甚至是停机调整等问题,因为es提供了索引的别名来解决这个问题,索引的别名就像一个快捷方式或者是软连接,可以指向一个或者多个索引,也可以给任意一个需要索引名的API来使用。

别名的操作

查询别名

直接调用 _a1ias API的GET方法可以看到索引的别名

GET 1ogstash-village-2023.0.25/_alias

使用别名进行查询

GET 1ogstash-vi1lage/_search {
    "query":{
        "match":{
            "name":“龙苑居住区”
        }
    }
}

创建别名

我们还可以在建立一个别名,别名和索引的关系是多对多的关系,一个索引可以有多个别名,同样一个别名也可以有多个索引 

POST /_aliases
{
    "actions": [{
        "add":{
            "index": "1ogstash-vi11age-2022.08.22",
            "alias": "logstash-vi1lage-1.0"
        }
    }]
}

别名修改

POST /_alias {
    "actions":[
        "remove":{
            "index":"1ogstash-vi11age-2022.08.22",
            "alias":"1ogstash-vi1lage-1.0"
        },
        {
            "add":{
                "index":"1ogstash-vi11age-2022.08.22",
                "alias": "1ogstash-vi1lage-2.0"
            }
        }
    ]
}

 别名的过滤

POST /_aliases {
    "actions":[
    {
        add":{
            "index":"logstash-village-2022.08.22",
            "alias":"logstash-village-hn",
            "filter":{
                "term":"province”:“河南省”
            }
        }
    }]
}

删除别名

查看索引的所有别名 
GET logstash-vi1lage-2023.04.25/_alias

删除其中一个别名
DELETE logstash-village-2023.04.25/ alias/logstash-village-route key

索引重建

es在字段的mapping建立后就不可再次修改mapping的值。在我们实际的情况下有些时候就是需要修改mapping的值,解决方案就是重新构建索引数据。

索引重建步骤

1、创建oldindex

 2、给索引创建别名

 3、想oldindex中插入9条数据

 4、创建新的索引newindex

 5、重建索引

 6、实现不重启服务索引的切换

创建旧索引

PUT oldindex 
{
    "mappings": {
        properties":{
            "name":{
                "type": "text
            },
            "price":{
                "type": "double"
            }
        }
    }
}

 添加数据

POST oldindex/_doc/_bulk
{"create":{"_id":1}}
{"name":"name 01","price":1}
{"create":{"_id":2}}
{"name":"name 02","price":2}
{"create":{" id":3}}
{"name":"name 03",price":3}
{"create":{"_id":4}}
{"name":"name 04","price":4}
{"create":{"_id":5}}
{"name":"name 05","price":5}
{"create":{"_id":6}}
{"name":"name 6","price":6}
{"create":{"_id":7}}
{"name":"name 07","price":7}
{"create":{"_id":8}}
{"name":"name 08","price":8}
{"create:{"_id":9}},
{"name" :"name 09","price":9}

查询数据

GET oldindex/_search {}

创建别名

POST /_aliases {
    "actions": [{
        "add": {
            "index": "oldindex",
            "alias": "search_index"
        }
    }]
}

使用别名查询数据

GET search_index/_search

 创建新的索引

根据需求我们创建一个新的索引,价格字段改为integer类型

PuT newindex 
{ 
    "mappings": {
        "properties":{
            "name":{
                "type":"text"
            },
            "price": {
                "type": "integer"
            }
        }
    }
}

重建新索引


数据量大的话可以异步执行,如果reindex时间过长,建议加上 wait_for_completion=false 的参数,这样 reindex 将直接返回 taskId。

PosT _reindex?wait_for_completion=false
{
    "conflicts":"proceed",//如果新的索引中数据冲突,程序继续往下执行,删除则会导致程序会终止
    "source":{
        "index":"oldindex"// 表示从oldindex中同步数据
    },
    "dest": { 
        "index":"newindex",// 表示数据插入新索引newindex中
        "op_type":"create"// 数据插入的类型为创建,如果存在就会版本冲突
    }
}

执行后会返回一个任务的ID

 可以根据任务id查询重建索引的情况,complete: true标识索引重建完成。

 取消重建索引任务
POST _task/索引重建任务ID/_cancel
更多参数示例
PosT _reindex?wait_for_completion=false
{
    "size”:5,// 表示只获取5条数据插入到新的索引中
    "conflicts":"proceed",//如果新索引中数据冲突,程序维续执行,删除会导致程序会止
    "source":{
        "size":2,//默认情况下,_reindex使用1000进行批量操作,调整批量插入2条
        "index":"oldindex",// 表示从o1dindex,类型product中查询出price字段的值"
        "_source":[ 
            "price”//只需要同步price字段
        ],
        "query":{
            "range":{
                "price":{
                    "gte": 2,
                    "1te":8
                }
            }
        }
    },
    "dest": {
        "index": "newindex", // 表示数据插入新索引newindex中
        "op_type": "create" // 数据插入的类型为创建,如果存在就会版本冲突
    }
}

别名切换

我们需要将别含切换到另刚刚重建的索引上,切换索引可以实现不重启服务索引的切换 

POST _aliases {
    "actions":[
    {
        "remove":{
            "index": "oldindex”,
            "alias":"search_index"
        },
    },
    {
        add":{
            "index": "newindex”,
            "alias": "search_index"
        }
    }
    ]
}

 删除旧索引

delete oldindex

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1609219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小型燃气站3D可视化:打造安全高效的燃气新时代

随着科技的不断进步,越来越多的行业开始融入3D可视化技术,燃气行业也不例外。 小型燃气站作为城市燃气供应的重要节点,其安全性和运行效率至关重要。传统的燃气站管理方式往往依赖于人工巡检和纸质记录,这种方式不仅效率低下&…

JVM 讲解 (主要类加载其以及流程和机制(双亲委派))

JVM有什么用? 说白了,就是我们编写 Java 代码,编译 Java 代码,目的不是让它在 Linux、Windows 或者 MacOS 上跑,而是在 JVM 上跑。(保证只要有JVM这个东西,就可以跨平台使用Java) 可以把JVM想象…

事务的传播行为介绍和事务失效

常用的就下图介绍的这两种,REQUIRED 支持当前事务,如果不存在,就新建一个,EQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务 同一个service中必须用代理对象调用,否则失效

ADOP 万兆电口光模块:SFP+转RJ45端口解决方案

🌵在数据中心的接入层中,大多数服务器网卡(NIC)和存储设备都采用10GBASE-T RJ45端口,而与之相连的TOR(机架顶部)交换机通常配备SFP端口,且二者无法直接相连。为了解决该问题&#xf…

软考高级架构师:项目配置管理中产品配置例题

题目 项目配置管理中,产品配置是指一个产品在其生命周期各个阶段所产生的各种形 式和各种版本的文档、计算机程序、部件及数据的集合。该集合中的每一个元素 称为该产品配置中的 一个配置项, ( )不属于产品组成部分工作成果的配置项。 A需求文档 B设计文…

Redis中的事务(二)

事务 事务的实现 执行事务 当一个处于事务状态的客户端向服务器发送EXEC命令时,这个EXEC命令将立即被服务器执行,服务器会遍历这个客户端的事务队列,执行队列中保存的所有命令,最后将执行命令所得的结果全部返回给客户端。 例…

3、MYSQL-一条sql如何在MYSQL中执行的

MySQL的内部组件结构 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server层 主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函…

MIMO(多天线)通信的四种译码算法

目录 一. 介绍 二. 极大似然译码 三. 破零译码算法 四. 最小均方误差算法 五. 球形译码 一. 介绍 发射天线数记为Mt,接收天线数记为Mr。由此发射信号x为向量: 接受信号y为向量: 信道H为矩阵: 利用n代表噪声向量,…

【若依前后端分离】温湿度仪表盘

示例&#xff1a; 代码&#xff1a; TemperatureAndHumidity.vue组件 //温湿度仪表盘 <template><div><!-- 在这里放置你的图表组件 --><div ref"echarts" style"width: 100%; height: 400px;"></div></div> </t…

【C++干货基地】面向对象核心概念 const成员函数 | 初始化列表 | explicit关键字 | 取地址重载

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

数据结构PT1——线性表/链表

1&#xff1a;顺序存储实现(数组实现) Data&#xff1a; a1 a2 .....ai ai1 .... an .... typedef struct LNode *List; //指向LNode的指针&#xff0c;这是typedef的&#xff0c;你可以随时声明&#xff0c;而不加typedef只是创建一个 struct LNode{ //结构体成员ElementT…

Sentinel 流控注解使用

大概原理&#xff1a;通过反射解析注解 SentinelResource信息完成调用&#xff0c;处理方法&#xff0c;类似AOP编程 处理方法的返回类型要保持一致&#xff0c;参数和顺序保持一致&#xff0c; 可以在参数列表最后加 com.alibaba.csp.sentinel.slots.block.BlockException; …

【leetcode面试经典150题】62. K 个一组翻转链表(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

OpenHarmony音视频—opus

简介 Opus是一种用于在互联网上进行交互式语音和音频传输的编解码器。它可以从低比特率窄带语音扩展到非常高的高品质立体声音乐。 下载安装 直接在OpenHarmony-SIG仓中搜索opus并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 将下载的opus库代码存在以下路径&a…

视觉slam14讲-大纲-持续更新

视觉slam入门太难 数学理论编程知识计算机视觉知识 缺一不可&#xff0c;大家一起加油

ACL的基本配置

已经启用&#xff52;&#xff49;&#xff50;实现了全网可达。 这时我们要拒绝R1与R4的路由通信&#xff0c;做标准ACL过滤关注源IP需要尽量靠近目标。则在R4的物理接口G0/0/1的&#xff49;&#xff4e;接口上做&#xff0c;不能在R4的环回接口上做&#xff0c;因为ACL列表…

网络管理和文件传输的工具推荐

在Hadoop及以后的相关学习中 我给大家推荐两款好用的软件 Xshell和Xftp是两款常用于网络管理和文件传输的工具。 首先&#xff0c;让我来介绍一下Xshell。Xshell是一款功能强大的SSH&#xff08;Secure Shell&#xff09;客户端&#xff0c;它允许用户通过安全加密的方式远程…

【web网页制作】html+css旅游家乡山西主题网页制作(3页面)【附源码】

山西旅游网页目录 涉及知识写在前面一、网页主题二、网页效果Page1、景点介绍Page2、酒店精选|出行攻略Page3、景色欣赏 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 四、网页源码4.1 主页模块源码4.2 源码获取方式 作者寄语 涉及知识 山西旅游主题网页制作&am…

idea显示maven或者gradle无法从仓库获取到项目中的jar包,jar包所在仓库无法访问解决方法,百试百灵

**idea显示maven或者gradle无法从仓库获取到项目中的jar包&#xff0c;jar包所在仓库无法访问解决方法&#xff0c;百试百灵** 直接上图&#xff0c;大概的故障问题就是&#xff1a;idea导入新的项目&#xff0c;因为项目中很多的jar需要从远程仓库下载&#xff0c;但是远程仓库…

跟着Carl大佬学leetcode之844 比较含退格的字符串

来点强调&#xff0c;刷题是按照代码随想录的顺序进行的&#xff0c;链接如下https://www.programmercarl.com/本系列是记录一些刷题心得和学习过程&#xff0c;就看到题目自己先上手试试&#xff0c;然后看程序员Carl大佬的解释&#xff0c;自己再敲一遍修修补补&#xff0c;练…