方案二
: 热点数据单独索引,历史数据按时间进行索引
常用数据切分方案参考:
Sizing Elasticsearch
下面重点介绍下“基于时间的索引” (
time-based indices
) 的相关技巧
1、如何选择划分的时间范围
根据数据的增长速度不同 可以按天(索引名类似2019-09-24),按月(索引名类似2019-09),按年(索引名类似2019)进行划分
2、设计一个索引模板
对于我们业务来说,其实每个索引除了索引名称不同以外,其他的都是一样的,所以我们可以设计一个模板,用于每次索引的创建。这里需要用到就 ES 的
Index Templates
机制。
Index Templates 的基本原理是:首先预定义一个或多个 “索引模板”(index template,其中包括 settings 和 mappings 配置);然后在创建索引时,一旦索引名称匹配了某个 “索引模板”,ES 就会自动将该 “索引模板” 包含的配置(settings 和 mappings)应用到这个新创建的索引上面。
以业务为例,假设我们的 ES 索引需求如下:
按越索引(索引名称形如 business-2019-09)
每天的数据按所属的月份存入对应月份的索引
搜索的时候,希望搜索范围是所有的索引(借助 alias)
基于上述索引需求,对应的 “索引模板” 可以设计为:
$ curl -XPUT http://localhost:9200/_template/business_template -d
"template": "business-*",
"settings": {
"number_of_shards": 1
"mappings": {
"log": {
"dynamic": false,
"properties": {
"content": {
"type": "string"
"created_at": {
"type": "date",
"format": "dateOptionalTime"
"aliases": {
"search-business": {}
复制代码
说明:
创建索引时,如果索引名称的格式形如 “business-*”,ES 会自动将上述 settings 和 mappings 应用到该索引
aliases 的配置,告诉 ES 在每次创建索引时,自动为该索引添加一个名为 “search-business” 的 alias(别名)
索引与搜索
基于上述 “索引模板” 的设计,索引与搜索的策略就很直接了。
索引策略
:每天的数据,只索引到当月对应的索引。比如,2019 年9 月 24 日这天的数据,只索引到 business-2019-09 这个索引当中。
搜索策略
:因为搜索需求是希望全量搜索,所以在搜索的时候,索引名称使用 “search-business” 这个 alias 即可。
更多关于 “如何有效管理基于时间的索引” 的技巧,可以参考
Managing Elasticsearch time-based indices efficiently