使用索引别名和Rollover滚动创建索引

ElasticSearch6.3.2 集群做节点冷(warm) 热(hot) 分离中,实现了ElasticSearch集群节点的冷热分离,新创建的索引只允许分配到hot节点上,而随着时间推移,旧的历史索引数据需要迁移到warm节点上。因此,ES索引上存储的数据一般是按时间划分的:比如每个月自动生成一个索引,用来存储这个月生产的所有数据。为了更方便地管理按时间生成的索引,可采用索引模板并结合ES的Rollover功能来方便地管理索引。

先创建索引模板,索引模板里面定义的索引别名是不能用于rollover的。因为,索引模板里面的索引别名一般会指向多个"物理"索引。具体可参考:rollover-failing。指向多个"物理"索引的索引别名不能用来写数据。

PUT _template/pubchat
{
"index_patterns": "pubchat-*",
"settings": {
"index": {
"number_of_shards": "3",
"number_of_replicas": "1",
"routing": {
"allocation": {
"exclude": {
"box_type": "warm"
},
"require": {
"box_type": "hot"
}
}
}
}
},
"mappings": {
"_doc": {
"_source": {
"enabled": true
},
"properties": {
"uid": {
"type": "keyword"
},
"nick": {
"type": "keyword"
},
"chatTime": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
}
}
}
},
"aliases": {
"pubchat-search-alias": {}
}
}

索引别名 pubchat-search-alias 主要是为了用来搜索(读操作)。要注意区分2类索引别名:一种是write index,另一种是read index,具体可参考 ES Index Alias 官方文档。

创建新索引,自动命中索引模板,并为索引pubchat-202001创建一个专门用来搜索的别名:pubchat-search-alias

#创建一个索引
PUT pubchat-202001

指定一个专门 进行rollover(滚动写入) 的索引别名。索引别名 pubchat-write-alias 是为了数据写入使用

#为索引再指定一个只用来 rollover 的别名
POST _aliases
{
"actions": [
{
"add": {
"index": "pubchat-202001",
"alias": "pubchat-write-alias"
}
}
]
}

rollover别名pubchat-write-alias只需要在创建第一个索引时指定一次,后面pubchat-write-alias会自动滚动指向:pubchat-202002、pubchat-202003……

rollover 索引别名的主要作用是"滚动写入",因此rollover索引别名只能指向一个具体的索引。

An alias that points to one and only one index can be used to read and write data. An alias that points to more than one index is read-only.

关于索引别名的详细描述可参考官方文档:Write Index

为索引指定滚动策略。这里为了测试方便,当一个索引中超过2篇文档时,就生成一个新索引。

# 指定rollover 的策略
POST /pubchat-write-alias/_rollover
{
"conditions": {
"max_docs": 2
}
}

由于是新创建的索引,里面没有数据,因此应该返回如下:

{
"acknowledged": false,
"shards_acknowledged": false,
"old_index": ""pubchat-202001",
"new_index": "pubchat-202002",
"rolled_over": false,
"dry_run": false,
"conditions": {
"[max_docs: 2]": false
}
}

最后,只需要向rollover索引别名 pubchat-write-alias 写数据即可,当满足rollover指定的策略时,会自动创建下一个新索引。

# 写一点测试数据进去
PUT pubchat-write-alias/_doc/1
{
"uid" : "111",
"nick" : "test"
}

值得注意的是:index.refresh_interval 参数会影响滚动策略准确性。比如max_docs设置成2,受refresh_interval 影响,索引中包含的文档数量是有可能大于2个的。

一个示例说明:

为了一个月生成一个索引(pubchat-yyyyMM),比如:pubchat-202001、pubchat-202002、pubchat-202003……

引入了Rollover之后,写数据只需要往 pubchat-write-alias 索引(别名)上写,当写入的数据触发 指定的 rollover 策略时,会自动生成新的索引(会去匹配已定义好的索引模板)

restHighLevelClient.bulkWrite("pubchat-write-alias");

若不采用Rollover,则需要自己在代码逻辑中写数据时,按月判断生成索引名称。

restHighLevelClient.bulkWrite("pubchat-202001");//1月份
restHighLevelClient.bulkWrite("pubchat-202002");//2月份
....

显然rollover简化了索引的管理。另,ES6.7版本引入了 Index LifeCycle Management,应该能更方便地管理索引了吧。

原文:https://www.cnblogs.com/hapjin/p/11386965.html

使用索引别名和Rollover滚动创建索引的更多相关文章

  1. SQL 创建索引的作用以及如何创建索引

    SQL 创建索引的作用以及如何创建索引 SQL 创建索引的作用 一.使用索引的优点: 1.通过唯一性索引(unique)可确保数据的唯一性 2.加快数据的检索速度 3.加快表之间的连接 4.减少分组和 ...

  2. ElasticSearch(三十)基于scoll+bulk+索引别名实现零停机重建索引

    1.为什么要重建索引? 总结,一个type下的mapping中的filed不能被修改,所以如果需要修改,则需要重建索引 2.怎么zero time重建索引? 一个field的设置是不能被修改的,如果要 ...

  3. Mysq索引优化(什么情况创建索引,什么情况不创建索引)

    一.以下情况需要创建索引 1.主键自动建立唯一索引 2.频繁作为查询条件的字段应该创建索引 3.查询中与其他表关联的字段,外键关系建立索引 4.单键/组合索引的选择问题,组合索引性价比更高 5.查询中 ...

  4. ES 10 - Elasticsearch的索引别名和索引模板

    目录 1 索引模板概述 1.1 什么是索引模板 1.2 索引模板中的内容 1.3 索引模板的用途 2 创建索引模板 3 查看索引模板 4 删除索引模板 5 模板的使用建议 5.1 一个index中不能 ...

  5. MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划

    这篇文章主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下 一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存 ...

  6. Lucene.net 从创建索引到搜索的代码范例

    关于Lucene.Net的介绍网上已经很多了在这里就不多介绍Lucene.Net主要分为建立索引,维护索引和搜索索引Field.Store的作用是通过全文检查就能返回对应的内容,而不必再通过id去DB ...

  7. lucene简介 创建索引和搜索初步

    lucene简介 创建索引和搜索初步 一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引 ...

  8. lucene全文搜索之二:创建索引器(创建IKAnalyzer分词器和索引目录管理)基于lucene5.5.3

    前言: lucene全文搜索之一中讲解了lucene开发搜索服务的基本结构,本章将会讲解如何创建索引器.管理索引目录和中文分词器的使用. 包括标准分词器,IKAnalyzer分词器以及两种索引目录的创 ...

  9. MySql 创建索引原则

    https://blog.csdn.net/csdnones/article/details/50412603 为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引 ...

随机推荐

  1. Jenkins持续集成的应用--基础

    1.测试工程师为什么要掌握持续集成 一个程序员如果想发布一个产品,他需要编码.编译.测试,发布的过程.对于一个企业来说,如果也想发布一个产品的话,同样的也是需要上述的过程,区别在于企业要发布的产品的需 ...

  2. 高精度gcd

    #include<iostream> #include<cstdio> #include<cstring> #define inf 1000000000 using ...

  3. PHP MySQLi 参考手册

    PHP MySQLi函数 PHP MySQLi是MySQL的增强版本,PHP7 已经废弃了MySQL扩展,全面推荐使用MySQLi或者PDO. MySQLi安装>>>>> ...

  4. JavaScript RegExp(正则表达式) 对象

    正则表达式是描述字符模式的对象.正则表达式用于在文本上执行模式匹配和“搜索和替换”功能. var patt = /JC2182/i 示例说明: /JC2182/i - 是一个正则表达式. JC2182 ...

  5. Excel解析工具easyexcel全面探索

    1. Excel解析工具easyexcel全面探索 1.1. 简介 之前我们想到Excel解析一般是使用POI,但POI存在一个严重的问题,就是非常消耗内存.所以阿里人员对它进行了重写从而诞生了eas ...

  6. Spring Cloud Netflix之Eureka Clients服务提供者

    之前一章我们介绍了如何搭建Eureka Server,这一章,我们介绍如何搭建服务提供者. Eureka Clients介绍 服务的提供者,通过发送REST请求,将自己注册到注册中心(在高可用注册中心 ...

  7. c# 根据一个给定经纬度的点和距离,搜索附近5公里范围的地点

    功能需求:需要查询一个站点(已知该站点经纬度)5公里范围内的其它站点. 方 法 一 :对每条记录,去进行遍历,跟数据库中的每一个点进行距离计算,当距离小于5公里时,认为匹配(效率极其低下,耗时长). ...

  8. Odoo 启动选项总结

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189209.html 一:启动选项用在哪里 如果你是用Pycharm进行odoo二次开发的话,可以通过 R ...

  9. 全球唯一标识符 System.Guid.NewGuid().ToString()

    System.Guid.NewGuid().ToString(); //ToString() 为 null 或空字符串 (""),则使用"D". 结果:8209 ...

  10. spring-cloud-kubernetes服务发现之在k8s环境下开发spring cloud应用

    通常情况下,我们的线上的服务在迁移到k8s环境下的时候,都是采用平滑迁移的方案.服务治理与注册中心等都是采用原先的组件.比如spring cloud应用,在k8s环境下还是用原来的一套注册中心(如eu ...