elasticsearch 6.8.x 索引别名、动态索引扩展、滚动索引

news/2024/4/27 19:34:13/文章来源:https://blog.csdn.net/dongzi_yu/article/details/137014273

文章目录

  • 引言
  • 索引别名(alias)
    • 创建索引别名
    • 查询索引别名
    • 删除索引别名
    • 重命名索引别名
  • 动态索引(index template,动态匹配生成索引)
    • 新建索引模板
    • 新建索引并插入数据
      • 索引sys-log-202402
      • 索引sys-log-202403
      • 索引sys-log-202404
    • 使用动态索引指定的别名查询数据
    • 别名关联索引,拒绝写入异常
  • 滚动索引(_rollover)
    • 创建符合滚动要求的索引
    • 执行一次索引滚动API
    • 插入5条测试记录,重新执行滚动API
    • 查询别名和索引绑定关系
  • 滚动索引(ilm:索引生命周期策略,自动滚动)
    • 创建自定义的ilm生命周期
    • 创建索引模板并引用自定义ilm配置
  • 参考链接

引言

最近查阅了一些资料,了解到关于es索引别名,特别在此记录一下:

  • 索引别名绑定多个索引:隐藏底层索引名,对外开放索引别名进行查询和更新操作

【elasticsearch 6.8.x 官网,关于索引别名】

  • 滚动索引(_rollover):创建的索引和索引别名自动绑定,使用别名对外查询无感知

【elasticsearch 6.8.x官网,关于索引模板创建、引用】

  • 滚动索引(ILM):按照ilm索引生命周期策略,自动换绑索引别名指向的索引,分为四个周期
    • hot:热区,高查询、高修改频词
    • warm:温区,不再更新索引,仍然提供查询服务
    • cold:冷区,索引不再更新,并且很少查询。信息仍然需要可搜索,但如果这些查询速度较慢也没关系
    • delete:不再需要索引,可以安全地删除

【elasticsearch 6.8.x 官网,关于索引生命周期支持】

索引别名(alias)

索引别名的创建时机:

  1. 在创建索引和字段关系映射的时候直接settings索引和索引别名的关系
  2. 在索引已经存在并稳定运行的情况下,通过API【PUT /_aliases】动态绑定索引,能隐藏底层索引的改变,操作对用户无感知

这里不讨论索引别名的routing filter,只讨论索引和索引别名的映射关系,以及是否是写入索引(write index)。

创建索引别名

POST /_aliases################### 新建别名参数及备注
################### 索引名test_template-202403假设已经是存在的
{"actions": [{"add": {// 别名关联的索引名"index": "test_template-202403",// 别名"alias": "tmp_index_alias","is_write_index": false // 默认是缺省的,如果一个别名只绑定了一个索引,那他将允许写入;如果一个别名绑定了多个索引,在不指定is_write_index: true的情况下,使用别名新增数据,会出现拒绝写入的情况}}]
}

image.png

查询索引别名

GET /_aliases

image.png

删除索引别名

DELETE /_aliases################### {"actions": [{"remove": {// 别名关联的索引名"index": "test_template-202403",// 别名"alias": "tmp_index_alias"}}]
}

在这里插入图片描述

重命名索引别名

POST /_aliases########################## 别名操作的同一个actions API里面操作是原子性的
########################## 重命名的过程就是删除原先的别名关联,新增新的关联{"actions": [{"remove": {// 别名关联的索引名"index": "test_template-202403",// 别名"alias": "tmp_index_alias"}},{"add": {// 别名关联的索引名"index": "test_template-202403",// 别名"alias": "tmp_index-2_alias"}}]
}

在这里插入图片描述

动态索引(index template,动态匹配生成索引)

新建索引模板

【es官网,索引模板】

# sys-log是索引模板的名称
PUT /_template/sys-log################### 创建索引模板的参数{// 使用此模板的优先级,数值越大,优先级越高,数值大的索引模板配置会覆盖优先级小的配置"order": 2,// 索引模板匹配规则:所有创建的索引都会以此模板的配置项生成索引。 sys-log*开头的索引才会使用这个模板"index_patterns": ["sys-log*"],// 设置索引别名:后续匹配到的所有索引都会使用此别名配置"aliases": {// 设置一个索引别名"sys-log-alias": {}},"template": {"settings": {"index": {// 两个分片"number_of_shards": "2",// 0个副本"number_of_replicas": "0",// 数据插入es后,过10s才能被查到"refresh_interval": "10s",// 单次最大允许的查询条数"max_result_window": "1000"}},// 配置字段映射关系、配置字段类型、配置字段指定分词器"mapping": {"_doc": {"properties": {"id": {"type": "long"},// 操作记录允许分词查询"operation": {"type": "text",// 指定分词器"analyzer": "ik_smart",},// 创建时间"create_date": {"type": "date"}}}}}
}

新建索引并插入数据

新建的索引只需要插入数据,关系映射和配置都使用索引模板sys-log

索引sys-log-202402

POST /sys-log-202402/_doc/_bulk=============>
{"index": {"_id": 1}}
{"id":1,"operation":"查询:/getInfo;参数a=1&b=2","create_date":"2024-02-15"}
{"index": {"_id": 2}}
{"id":2,"operation":"查询:/listPage;参数{page: 1, size: 10}","create_date":"2024-02-16"}
{"index": {"_id": 3}}
{"id":3,"operation":"新增:/addOrUpdate;","create_date":"2024-02-17"}

索引sys-log-202403

POST /sys-log-202403/_doc/_bulk=============>
{"index": {"_id": 1}}
{"id":1,"operation":"查询:/getInfo;参数a=1&b=2","create_date":"2024-02-15"}
{"index": {"_id": 2}}
{"id":2,"operation":"查询:/listPage;参数{page: 1, size: 10}","create_date":"2024-02-16"}
{"index": {"_id": 3}}
{"id":3,"operation":"新增:/addOrUpdate;","create_date":"2024-02-17"}

索引sys-log-202404

POST /sys-log-202404/_doc/_bulk=============>
{"index": {"_id": 1}}
{"id":1,"operation":"查询:/getInfo;参数a=1&b=2","create_date":"2024-02-15"}
{"index": {"_id": 2}}
{"id":2,"operation":"查询:/listPage;参数{page: 1, size: 10}","create_date":"2024-02-16"}
{"index": {"_id": 3}}
{"id":3,"operation":"新增:/addOrUpdate;","create_date":"2024-02-17"}

使用动态索引指定的别名查询数据

POST /sys-log-alias/_search=============> 查询参数
{"query": {"bool": {"must": {"match": {"operation": "查询"}}}},"highlight": {"fields": {"comment_content": {}},"number_of_fragments": 0,"pre_tags": ["<b style='color: blue'>"],"post_tags": ["</b>"],"require_field_match": false,"type": "plain"},"from": 0,"size": 10000,"sort": [],"aggs": {}
}============================> 返回结果{"took": 5,"timed_out": false,"_shards": {"total": 15,"successful": 15,"skipped": 0,"failed": 0},"hits": {"total": 6,"max_score": 0.5753642,"hits": [{"_index": "sys-log-202402","_type": "_doc","_id": "2","_score": 0.5753642,"_source": {"id": 2,"operation": "查询:/listPage;参数{page: 1, size: 10}","create_date": "2024-02-16"}},{"_index": "sys-log-202403","_type": "_doc","_id": "2","_score": 0.5753642,"_source": {"id": 2,"operation": "查询:/listPage;参数{page: 1, size: 10}","create_date": "2024-02-16"}},{"_index": "sys-log-202404","_type": "_doc","_id": "2","_score": 0.5753642,"_source": {"id": 2,"operation": "查询:/listPage;参数{page: 1, size: 10}","create_date": "2024-02-16"}},{"_index": "sys-log-202402","_type": "_doc","_id": "1","_score": 0.5753642,"_source": {"id": 1,"operation": "查询:/getInfo;参数a=1&b=2","create_date": "2024-02-15"}},{"_index": "sys-log-202403","_type": "_doc","_id": "1","_score": 0.5753642,"_source": {"id": 1,"operation": "查询:/getInfo;参数a=1&b=2","create_date": "2024-02-15"}},{"_index": "sys-log-202404","_type": "_doc","_id": "1","_score": 0.5753642,"_source": {"id": 1,"operation": "查询:/getInfo;参数a=1&b=2","create_date": "2024-02-15"}}]}
}

通过返回结果分析:
查询结果可以看出索引别名关联的所有索引中结果全部被查询出来,如果指定索引名称查询,那么查询结果就是单独这个索引中的数据。
sys-log-alias --> sys-log-202402
sys-log-alias --> sys-log-202403
sys-log-alias --> sys-log-202404

别名关联索引,拒绝写入异常

但是有一点需要注意,如果对应索引关联的别名未指定is_write_index=true使用别名进行插入会出现拒绝写入的错误。
错误如下:

{"error": {"root_cause": [{"type": "illegal_argument_exception","reason": "no write index is defined for alias [sys-log-alias]. The write index may be explicitly disabled using is_write_index=false or the alias points to multiple indices without one being designated as a write index"}],"type": "illegal_argument_exception","reason": "no write index is defined for alias [sys-log-alias]. The write index may be explicitly disabled using is_write_index=false or the alias points to multiple indices without one being designated as a write index"},"status": 400
}

如果想要使用别名进行关联的索引数据写入,需要将关联的索引is_write_index字段设置为true:
点击查看【重命名索引别名】

POST /_aliases==============> 因为这个API操作的原子性,在操作的的过程中不会影响到其他
{"actions": [// 把原关联索引删除{"remove": {// 别名关联的索引名"index": "sys-log-202404",// 别名"alias": "sys-log-alias"}},// 建立新的别名关联索引,并设置is_write_index=true,再次使用别名进行数据写入的时候,数据就自动插入sys-log-202404索引中了{"add": {// 别名关联的索引名"index": "sys-log-202404",// 别名"alias": "sys-log-alias","is_write_index": true}}]
}

滚动索引(_rollover)

判断索引是否需要进行一次滚动生成时机:

  1. 每次插入数据,判断一次索引是否满足滚动条件
  2. 指定时间,判断一次索引是否满足滚动条件

【es官网,关于滚动索引】
执行POST /索引别名/_rollover手动滚动索,自动把索引别名换绑到新的索引上,查询和保存都在这一个索引上。滚动索引的名称需要符合滚动的命名规则如:时间 sys-log-20240325 数字sys-log-00001。对外仍然使用一个索引别名,通过不停地换绑索引实现滚动,对外无感知。但,缺点也非常明显,索引一旦换绑,之前的数据将会不可查,除非重新绑定到索引别名上。

关于滚动索引:
image.png
索引滚动满足滚动条件(满足之一)后会创建新索引并换绑:

image.png

创建符合滚动要求的索引

POST /log_rollover-202403-1===========> 创建参数
{"settings": {"index": {"number_of_shards": "2","number_of_replicas": "0"}},"aliases": {"log_rollover_alias": {}},"mapping": {"_doc": {"properties": {"id": {"type": "long"},"create_date": {"type": "date"},"content": {"type": "text"}}}}
}

image.png

执行一次索引滚动API

PUT /log_rollover_alias/_rollover====> 滚动条件判断,满足任何一个滚动条件,就创建一个新索引
{"conditions": {# 最大文档记录数,滚动"max_docs": 5,# 索引创建了7天,滚动"max_age": "7d",# 索引最大存储5gb,滚动"max_size": "5gb"}
}===> 返回
{		# 索引没有滚动成功,不符合滚动条件"acknowledged": false,"shards_acknowledged": false,"old_index": "log_rollover-202403-1",# 如果滚动成功,新生成的索引名将会是log_rollover-202403-000002,别名log_rollover_alias指向"new_index": "log_rollover-202403-000002","rolled_over": false,"dry_run": false,"conditions": {"[max_docs: 5]": false,"[max_size: 5gb]": false,"[max_age: 7d]": false}
}

在这里插入图片描述

插入5条测试记录,重新执行滚动API

重新执行滚动索引API============>返回结果
{# 滚动成功"acknowledged": true,"shards_acknowledged": true,"old_index": "log_rollover-202403-1",# 别名绑定的新索引名称"new_index": "log_rollover-202403-000002","rolled_over": true,"dry_run": false,"conditions": {"[max_docs: 5]": true,"[max_size: 5gb]": false,"[max_age: 7d]": false}
}

查询别名和索引绑定关系

GET /_aliases=====> 返回{"...": "...","log_rollover-202403-000002": {"aliases": {"log_rollover_alias": {}}},"log_rollover-202403-1": {"aliases": {}},"...": "..."
}

image.png

缺点:

  1. 一旦索引发生滚动,索引别名和索引关联关系换绑,之前的索引数据将不可查。
  2. 索引滚动之后,之前的分片配置,字段关系也不会被复制过来。
  3. 不能使用索引模板(经测试索引模板中is_write_index设置为写入索引在生成动态索引的时候不会被复用),会出现错误:

Rollover alias [log_rollover-alias] can point to multiple indices, found duplicated alias [[log_rollover-alias]] in index template [log_rollover]

es官网又提供了索引生命周期管理策略,符合要求自动滚动,不再需要去手动执行

滚动索引(ilm:索引生命周期策略,自动滚动)

待测试…ILM生命周期测试滚动情况。

创建自定义的ilm生命周期

【es官网,关于创建自定义生命周期】
【es官网,关于ilm API】

PUT /_ilm/policy/my_policy================> ilm 策略参数
{// 策略定义子对象"policy": {                       "phases": {"hot": {                      "actions": {// 滚动更新操作定义"rollover": {             "max_size": "50GB","max_age": "30d" // 最大30天属于热门搜索、写入}}},"delete": {// 删除阶段在 90 天后开始"min_age": "90d",      // 删除操作定义     "actions": {"delete": {}              }}}}
}

image.png

创建索引模板并引用自定义ilm配置

【es官网,关于创建索引并应用ilm策略】

创建索引模板

POST /_template/log-policy==========>
{// 使用此模板的优先级,数值越大,优先级越高,数值大的索引模板配置会覆盖优先级小的配置"order": 2,// 索引模板匹配规则:所有创建的索引都会以此模板的配置项生成索引。 log-policy*开头的索引才会使用这个模板"index_patterns": ["log-policy-*"],// 设置索引别名:后续匹配到的所有索引都会使用此别名配置"aliases": {// 设置一个索引别名"log-policy-alias": {}},"template": {"settings": {"index": {// 两个分片"number_of_shards": "2",// 0个副本"number_of_replicas": "0",// 数据插入es后,过10s才能被查到"refresh_interval": "10s",// 单次最大允许的查询条数"max_result_window": "1000","lifecycle": {// 管理索引的生命周期策略的名称"name": "my_policy",// 用于滚动更新操作的别名,由于在策略中定义了滚动更新操作,因此需要这样做。"rollover_alias": "log-policy-alias",}}}},// // 配置字段映射关系、配置字段类型、配置字段指定分词器// "mapping": {//     "_doc": {//         "properties": {//             "id": {//                 "type": "long"//             },//             // 操作记录允许分词查询//             "operation": {//                 "type": "text",//                 // 指定分词器//                 "analyzer": "ik_smart",//             },//             // 创建时间//             "create_date": {//                 "type": "date"//             }//         }//     }// }
}

创建索引

PUT /log-policy-00001=======> 使用index template创建索引
{"aliases": {"log-policy-alias": {// 使用索引模板创建索引,并把当前索引指定为可写索引,一遍后面能把索引和策略正确的绑定在一切"is_write_index": true}}
}

查询ilm管理的索引生命周期

GET /log-policy-*/_ilm/explain====> 返回
{"indices": {"log-policy-00001": {"index": "log-policy-00001",# 这里有问题,待测试"managed": false}}
}

参考链接

https://blog.csdn.net/fenglibing/article/details/92069583
https://blog.csdn.net/zqskr_/article/details/134035978
https://blog.csdn.net/Weixiaohuai/article/details/124745320
https://blog.csdn.net/qq_44849679/article/details/136330621
https://blog.csdn.net/feiying0canglang/article/details/129789161
https://zhuanlan.zhihu.com/p/137810661

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

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

相关文章

C语言例4-3:复合语句,输出a,b的值

代码如下&#xff1a; //复合语句&#xff0c;输出a,b的值 #include<stdio.h> int main(void) {int a 10;printf("a %d\n",a);{int b20; //复合语句printf("b %d\n",b); //复合语句中的数据定义语句放在其他语句的前面}return …

uniapp实现单选组件覆盖选中样式

uniapp实现单选组件覆盖选中样式 完整代码&#xff1a; <!-- 是否选择组件: trueOfFalseChooseBtn --> <template><view class"is-true-body"><view class"btn-con" :class"isTrue ? btn-con-active : " click"clic…

42 ajax 下载文件未配置 responseType blob 导致的文件异常

前言 这是一个最近的关于文件下载碰到的一个问题 主要的情况是, 基于 xhr 发送请求, 获取下载的文件 然后 之后 xhr 这边拿到 字节序列之后, 封装 blob 来进行下载 然后 最开始我们这边没有配置 responseType 为 blob, arraybuffer, 然后 导致下载出来的 文件大小超过了…

前端Web移动端学习day05

移动 Web 第五天 响应式布局方案 媒体查询Bootstrap框架 响应式网页指的是一套代码适配多端&#xff0c;一套代码适配各种大小的屏幕。 共有两种方案可以实现响应式网页&#xff0c;一种是媒体查询&#xff0c;另一种是使用bootstrap框架。 01-媒体查询 基本写法 max-wid…

如何优化财务管理?中小型外贸企业实用指南

在当今全球化的商业环境中&#xff0c;越来越多的中小企业涉足外贸领域&#xff0c;以寻求更广阔的市场和发展空间。在这一过程中&#xff0c;财务管理的重要性尤为凸显&#xff0c;需关注外汇风险、税务合规性、现金流等多个方面的问题。 一、中小企业外贸财务管理难题 币种核…

Python入门练习 - 学生管理系统

Python 实现读书管理系统 """ 实现一个命令行版的读书管理系统 """ import os.path import sys# 使用这个全局变量&#xff0c;来管理所有的学生信息 # 这个列表的每个元素都是一个‘字典’&#xff0c;每 个 字典就分别表示了一个同学students …

argocd cli工具使用

一、前言 ragocd除了使用web界面操作之外&#xff0c;也可以通过argocd cli工具进行操作&#xff0c;关于集群创建、gitlab仓库创建、app创建都是可以通过yaml 文件去操作&#xff0c;使用web界面创建的操作也需要使用argocd cli工具进行备份 二、使用 在argocd部署的章节已经…

阿里云4核16G服务器优惠价格26元1个月、149元半年

阿里云4核16G服务器优惠价格26.52元1个月、79.56元3个月、149.00元半年。2024年腾讯云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也…

MySQL数据库高级语句

文章目录 MySQL高级语句older by 排序区间判断查询或与且&#xff08;or 与and&#xff09;嵌套查询&#xff08;多条件&#xff09;查询不重复记录distinctcount 计数限制结果条目limit别名as常用通配符嵌套查询&#xff08;子查询&#xff09;同表不同表嵌套查询还能用于删除…

Python基础教程:基本数据类型

基本数据类型 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组) 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合) Numbers(数字) 数字数据类型用于存储数值。 他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对…

【正点原子FreeRTOS学习笔记】————(12)信号量

这里写目录标题 一、信号量的简介&#xff08;了解&#xff09;二、二值信号量&#xff08;熟悉&#xff09;三、二值信号量实验&#xff08;掌握&#xff09;四、计数型信号量&#xff08;熟悉&#xff09;五、计数型信号量实验&#xff08;掌握&#xff09;六、优先级翻转简介…

腾讯云GPU云服务器_GPU云计算_异构计算_弹性计算

腾讯云GPU服务器是提供GPU算力的弹性计算服务&#xff0c;腾讯云GPU服务器具有超强的并行计算能力&#xff0c;可用于深度学习训练、科学计算、图形图像处理、视频编解码等场景&#xff0c;腾讯云百科txybk.com整理腾讯云GPU服务器租用价格表、GPU实例优势、GPU解决方案、GPU软…

LinkedIn 互联网架构扩展简史

LinkedIn成立于 2003 年&#xff0c;其目标是连接到您的网络以获得更好的工作机会。第一周只有 2,700 名会员。时间快进了很多年&#xff0c;LinkedIn 的产品组合、会员基础和服务器负载都取得了巨大的增长。 如今&#xff0c;LinkedIn 在全球运营&#xff0c;拥有超过 3.5 亿会…

R使用netmeta程序包实现生存数据的频率学网状meta分析

之前的推文系统的介绍了使用netmeta包实现对二分类变量、连续型变量和罕见事件的网状meta分析。今天的文章介绍如何使用netmeta程序包实现生存数据的频率学网状meta分析&#xff0c;用来评估6种免疫疗法&#xff08; Camrelizumab、Tislelzumab、Toripalimab、Sintilimab、Pemb…

(二)windows配置JDK环境

1、安装包下载地址&#xff0c;官网&#xff1a;Java Archive | Oracle 长期稳定支持版本8、11、17、21 选择一个需要下载的连接点进去&#xff1a; 在下载列表中根据操作系统选择不同的下载包&#xff1a; 注意&#xff1a;部分版本下载需要先登录后才可以下载。 安装包附件…

Canal解决Redis缓存与Mysql数据库的一致性问题

1、什么是Canal&#xff1f; 如何解决Redis缓存与Mysql数据库的一致性问题&#xff1f;我们常用数据双删缓存超时设置去解决。这样最差的情况&#xff0c;就是在超时时间内&#xff0c;数据存在不一致。 canal&#xff0c;译为管道&#xff0c;主要用途是基于 MySQL 数据库增…

(1) 易经与命运_学习笔记

个人笔记&#xff0c;斟酌阅读 占卦的原理 三个铜板&#xff0c;正面是3&#xff0c;反面2&#xff0c;三个一起转&#xff0c;得出6,7,8,9 数字象6老阴7少阳8少阴9老阳 生数和成数 生数和成数应该说出自《河图》。其中一二三四五为生数&#xff0c;六七八九十为成数。 生…

基于k6和python进行自动化性能测试

摘要&#xff1a;在性能测试中&#xff0c;达到相应的性能指标对于一个软件来说十分重要&#xff0c;在本文中&#xff0c;将介绍一种现代化性能测试工具k6。 import http from k6/http; import { sleep } from k6; export default function () { http.get(https://test-api…

正式发布:VitePress 1.0 现代化静态站点生成器!

大家好&#xff0c;我是奇兵&#xff0c;今天介绍一下现代化静态站点生成器!&#xff0c;希望能帮到大家。 3 月 21 日&#xff0c; 由 Vue 团队出品的现代化静态站点生成器 VitePress 正式发布 1.0 版本&#xff01;它专为构建快速、以内容为中心的网站而生&#xff0c;能够轻…

动态多态的注意事项

大家好&#xff1a; 衷心希望各位点赞。 您的问题请留在评论区&#xff0c;我会及时回答。 多态的基本概念 多态是C面向对象三大特性之一&#xff08;多态、继承、封装&#xff09; 多态分为两类&#xff1a; 静态多态&#xff1a;函数重载和运算符重载属于静态多态&#x…