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

文章目录

  • 引言
  • 索引别名(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.mzph.cn/news/776795.shtml

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

相关文章

Llama模型下载

最近llama模型下载的方式又又变了&#xff0c;所以今天简单更新一篇文章&#xff0c;关于下载的&#xff0c;首先上官网&#xff0c;不管在哪里下载你都要去官网登记一下信息&#xff1a;https://llama.meta.com/llama2 然后会出现下面的信息登记网页&#xff1a; 我这里因为待…

MoonBit MeetUp回顾——狼叔:我在期待下一个十年,目前没有找到更好的方向,所以从月兔开始!

狼叔在他的发言中&#xff0c;分享了自己对前端与后端技术、个人职业发展的思考&#xff0c;以及对独立开发者和技术栈变化的探索。 狼叔讲述了在大厂工作的经验&#xff0c;包括面对裁员和职业焦虑的挑战。狼叔强调了编码技能的重要性&#xff1a;“首先&#xff0c;编码是一项…

【LeetCode热题100】236. 二叉树的最近公共祖先(二叉树)

一.题目要求 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可…

[SpringCloud] Feign Client 的创建 (一) (四)

文章目录 1.FeignClientsRegistrar2.完成配置注册2.1 registerDefaultConfiguration方法2.2 迭代稳定性2.3 registerFeignClients方法 1.FeignClientsRegistrar FeignClientsRegistrar实现ImportBeanDefinitionRegistrar接口。 2.完成配置注册 public void registerBeanDefinit…

浏览器工作原理与实践--作用域链和闭包 :代码中出现相同的变量,JavaScript引擎是如何选择的

在上一篇文章中我们讲到了什么是作用域&#xff0c;以及ES6是如何通过变量环境和词法环境来同时支持变量提升和块级作用域&#xff0c;在最后我们也提到了如何通过词法环境和变量环境来查找变量&#xff0c;这其中就涉及到作用域链的概念。 理解作用域链是理解闭包的基础&#…

Verilog语法之assign语句学习

assign语法主要是对组合逻辑的变量进行赋值的&#xff0c;就是把一个变量赋值给另一个变量&#xff0c;被复制的变量必须是wire类型的参数。 从仿真结果可以看出&#xff0c;data_in变量的值赋值给了data_out,assign语法就是赋值没有任何延迟&#xff0c;data_in是什么值&#…

Java数据结构与集合原码

数据结构与集合原码 文章目录 数据结构与集合原码1. 数据结构基本概念1.1 概念1.2 数据结构的研究对象 2. 常见存储结构2.1 数组2.2 链表2.2.1 单向链表2.2.2 双向链表 2.3 二叉树2.4 栈(stack)2.5 队列 3. 二叉树3.1 二叉树的遍历3.2 经典二叉树 4. List实现类源码分析4.1 Arr…

redis和redisson实现分布式锁

redis和redisson实现分布式锁 基于setnx命令的分布式锁基于set命令的分布式锁redission看门狗分布式锁 基于setnx命令的分布式锁 1. 加锁 使用 Redis 实现分布式锁&#xff0c;最直接的想法是利用 setnx 和 expire 命令实现加锁。 在 Redis 中&#xff0c;setnx 是「set if …

1.排列数组奇数在前偶数在后

文章目录 大家好&#xff0c;我是晓星航。今天为大家带来的是 排列数组奇数在前偶数在后 相关的讲解&#xff01;&#x1f600; public static void swap(int[] array) {int left 0;int right array.length - 1;while (left < right) {while (left < right &&…

IDEA2023版本整合SpringBoot热部署

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 开发环境篇 ✨特色专栏&#xff1a; M…

手撕算法-最小覆盖子串

描述 分析 滑动窗口。 参考力扣官方的题解思路 本问题要求我们返回字符串 s 中包含字符串 t 的全部字符的最小窗口。我们称包含 t 的全部字母的窗口为「可行」窗口。 我们可以用滑动窗口的思想解决这个问题。在滑动窗口类型的问题中都会有两个指针&#xff0c;一个用于「延伸…

javascript基础练习题之渔夫捕鱼

一、题目要求&#xff1a;根据用户输入的年、月、日判断是打鱼还是晒网。代码中使用了isLeapYear函数来判断输入的年份是否为闰年&#xff0c;getDays函数来计算输入日期是一年中的第几天&#xff0c;然后根据计算结果来确定是打鱼还是晒网。最后代码通过弹窗提示用户是打鱼还是…

吴渔夫:AI技术引领游戏产业革命,小团队有大作为

AI技术的突飞猛进&#xff0c;游戏产业正在经历一场前所未有的变革。中国网游先锋&#xff0c;火石控股创始人吴渔夫&#xff0c;近日在接受第一财经日报的采访&#xff0c;对AI在游戏制作中的应用和未来趋势有着深刻的见解。 吴渔夫指出&#xff0c;AI技术的引入极大地降低了游…

游戏推广的新篇章:Xinstall助力实现全渠道效果统计与提升

随着游戏市场的日益繁荣&#xff0c;游戏推广已成为各大游戏公司争夺市场份额的关键环节。然而&#xff0c;面对众多推广渠道和复杂的用户行为&#xff0c;如何精准地评估推广效果、优化投放策略&#xff0c;成为了游戏推广人员亟待解决的问题。此时&#xff0c;Xinstall作为一…

绿岛机械加入2024第13届生物发酵展

参展企业介绍 南京绿岛机械设备有限公司是一家专注于碟式分离机领域的生产服务型企业。公司以多年从事离心分离设备的设计和制造经验为基础&#xff0c;通过产品改良和技术革新&#xff0c;从根本上解决了传统碟式分离设备的固有技术缺陷&#xff0c;增强了控制系统的安全性和…

2024第六届环境科学与可再生能源国际会议能源 (ESRE 2024) 即将召开!

2024第六届环境科学与可再生能源国际会议 能源 &#xff08;ESRE 2024&#xff09; 即将举行 2024 年 6 月 28 日至 30 日在德国法兰克福举行。ESRE 2024 年 旨在为研究人员、从业人员和专业人士提供一个论坛 从工业界、学术界和政府到研究和 发展&#xff0c;环境科学领域的专…

【C++初阶】之类和对象(中)

【C初阶】之类和对象&#xff08;中&#xff09; ✍ 类的六个默认成员函数✍ 构造函数&#x1f3c4; 为什么需要构造函数&#x1f3c4; 默认构造函数&#x1f3c4; 为什么编译器能自动调用默认构造函数&#x1f3c4; 自己写的构造函数&#x1f3c4; 构造函数的特性 ✍ 拷贝构造…

在Windows系统上安装多个 Nodejs

前言 在Windows系统安装Nodejs 在Windows系统上安装多个 Nodejs v14.16.1安装位置 D:\sde\nodejs\node-v14.16.1-win-x64 v16.20.2安装位置 D:\sde\nodejs\node-v16.20.2-win-x64 v18.20.0安装位置 D:\sde\nodejs\node-v18.20.0-win-x64 v20.12.0安装位置 D:\sde\nod…

Java毕业设计-基于springboot开发的游戏分享网站平台-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、后台登录2.1管理员功能模块2.2用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的…

ChatGLM2本地部署方法

chatglm2部署在本地时&#xff0c;需要从huggingface上下载模型的权重文件&#xff08;需要科学上网&#xff09;。下载后权重文件会自动保存在本地用户的文件夹上。但这样不利于分享&#xff0c;下面介绍如何将chatglm2模型打包部署。 一、克隆chatglm2部署 这个项目是chatgl…