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

索引别名

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

别名的作用

        在开发中,一般随着业务需求的迭代,较老的业务逻辑就要面临更新甚至是重构,对于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.mfbz.cn/a/558949.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

架构设计-权限系统之通用的权限系统设计方案

一个系统,如果没有安全控制,是十分危险的,一般安全控制包括身份认证和权限管理。用户访问时,首先需要查看此用户是否是合法用户,然后检查此用户可以对那些资源进行何种操作,最终做到安全访问。身份认证的方…

Junit 基础-ApiHug准备-测试篇-009

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 注解 J…

STM32直接存储器存取DMA

前提知识: 1、STM32F103内部存储器结构以及映射 STM32F103的程序存储器、数据存储器、寄存器和IO端口被组织在同一个4GB的线性地址空间内。数据字节以小端模式存放在存储器中。即低地址中存放的是字数据的低字节,高地址中存放的是字数据的高字节 可访问…

React间接实现一个动态组件逻辑

在开发一个浏览器插件的时候,用的plasmo框架和react支持的,里面使用react开发一个菜单功能,但是又不想使用react-router,所以就想着能不能使用一个很简单的方式做一个替代方案?那肯定是可以。 我在引入一个组件后&…

C语言 | Leetcode C语言题解之第40题组合总和II

题目: 题解: int** ans; int* ansColumnSizes; int ansSize;int* sequence; int sequenceSize;int** freq; int freqSize;void dfs(int pos, int rest) {if (rest 0) {int* tmp malloc(sizeof(int) * sequenceSize);memcpy(tmp, sequence, sizeof(int…

Golang | Leetcode Golang题解之第37题解数独

题目: 题解: func solveSudoku(board [][]byte) {var line, column [9][9]boolvar block [3][3][9]boolvar spaces [][2]intfor i, row : range board {for j, b : range row {if b . {spaces append(spaces, [2]int{i, j})} else {digit : b - 1line…

如何实现外网访问内网ip?公网端口映射或内网映射来解决

本地搭建服务器应用,在局域网内可以访问,但在外网不能访问。如何实现外网访问内网ip?主要有两种方案:路由器端口映射和快解析内网映射。根据自己本地网络环境,结合是否有公网IP,是否有路由权限,…

Vast+产品展厅 | Vastbase G100数据库是什么架构?(1)

Vastbase G100是海量数据融合了多年对各行业应用场景的深入理解,基于openGauss内核开发的企业级关系型数据库。 了解Vastbase G100的架构,可以帮助您确保数据库系统的高效、可靠和安全运行。 “Vast产品展厅”将分两期,为您详细讲解Vastbas…

Excel模板导入、导出工具类

1.引入maven依赖&#xff0c;利用hutool的excel读取 Hutool-poi对excel读取、写入 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency> <depen…

手写Java设计模式之工厂模式,附源码解读

工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一&#xff0c;这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 工厂模式提供了一种创建对象的方式&#xff0c;而无需指定要创建的具体类。 工厂模式属于创建型…

智慧园区引领产业智能化升级:科技创新驱动打造智慧化、高效化产业新未来

随着全球科技革命的深入推进&#xff0c;以大数据、云计算、物联网、人工智能等为代表的新一代信息技术正深刻改变着传统产业的发展模式。在这一背景下&#xff0c;智慧园区作为产业智能化升级的重要载体和平台&#xff0c;正以其前瞻性的规划、创新的科技和卓越的实践&#xf…

桥接模式【结构型模式C++】

1.概述 桥接模式是一种结构型设计模式&#xff0c;是用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化。这种类型的设计模式属于结构型模式&#xff0c;它通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。 这种模式涉及到一个作为桥接的接口&am…

完整、免费的把pdf转word文档

在线工具网 https://www.orcc.online/pdf 支持pdf转word&#xff0c;免费、完整、快捷 登录网站 https://orcc.online/pdf 选择需要转换的pdf文件&#xff1a; 等待转换完成 点击蓝色文件即可下载 无限制&#xff0c;完整转换。

C语言-浮点数在内存中的存储

目录 C语言-浮点数在内存中的存储 练习 浮点数的存储 浮点数存的过程 浮点数在内存的存储 浮点数取的过程 C语言-浮点数在内存中的存储 常见的浮点数&#xff1a;3.14149、1E10&#xff08;科学计数法表示形式&#xff1a;1.0*10^10&#xff09;等&#xff0c;浮点数家族…

数据赋能(62)——要求:数据管理部门能力

“要求&#xff1a;数据管理部门能力”是作为标准的参考内容编写的。 在实施数据赋能中&#xff0c;数据管理部门的能力体现在多个方面&#xff0c;关键能力如下图所示。 在实施数据赋能的过程中&#xff0c;数据管理部门应具备的关键能力如下。 数据治理与标准化能力 数据管…

数字技术重塑园区管理,数字园区开启智慧化新篇章,引领产业创新发展

目录 一、引言 二、数字技术重塑园区管理 1、智能化基础设施建设 2、数据驱动的决策管理 3、精细化服务模式 三、数字园区开启智慧化新篇章 1、智慧化运营管理 2、智慧化产业创新 3、智慧化生态环境 四、引领产业创新发展 1、推动传统产业转型升级 2、培育新兴产业…

A Geolocation Databases Study(2011年)第五部分:Evalution Model

下载地址:A Geolocation Databases Study | IEEE Journals & Magazine | IEEE Xplore 被引次数:195 Shavitt Y, Zilberman N. A geolocation databases study[J]. IEEE Journal on Selected Areas in Communications, 2011, 29(10): 2044-2056. 5. Discussion 在我们讨…

JavaSE——常用API进阶二(6/8)-ZoneId、ZoneDateTime、Instant(常见方法、用法示例)

目录 ZoneId 常见方法 用法示例 ZoneDateTime 常见方法 用法示例 Instant 常见方法 用法示例 如果在开发中我们有这样的需求&#xff1a;我们的系统需要获取美国现在的时间&#xff0c;或者其他地区的时间给用户观看&#xff0c;或者进行一些处理&#xff0c;那应该怎…

企业常用Linux正则表达式与三剑客企业生产环境及知识/企业中远程连接ssh工具,需要一定的配置(为什么连接有时慢?)

企业高薪思维: 1.学习去抓重点有价值知识 2.猛劲学&#xff0c;使劲学&#xff08;能否给别人将会&#xff0c;讲明白&#xff0c;写明白&#xff0c;练习明白&#xff09;&#xff0c;在学习过程中你觉得学会了60-80%&#xff0c;其实你只会了40-50%&#xff0c;你要讲明白会操…
最新文章