前言: elasticsearch是当今最为便捷的开源搜索引擎,但对于日增量较大的数据,如果不采用分索引的方式进行切割,则会面临单个索引数据无限膨胀的情况,因此必须考虑索引切割的方案,通常会选择某个维度进行切割,如时间维度。这里介绍一下利用ingest的processor基于时间字段进行索引切割的策略。
具体配置
PUT _ingest/pipeline/monthlyindex
{
"description": "monthly date-time index naming",
"processors" : [
{
"date_index_name" : {
"field" : "msgtime",
"date_formats": ["UNIX"],
"index_name_prefix" : "test-",
"date_rounding" : "M",
"timezone": "Asia/Shanghai"
}
}
]
}
monthlyindex为定义的processor名字,description为当前processor的描述,processor定义了其中的处理器,date_index_name为基于日期的索引自动选择处理器,field为时间字段,用于进行索引判断,data_formats为时间格式,UNIX为秒级时间戳格式,同样支持其他格式。index_name_prefix为自动索引前缀。date_rounding为索引滚动策略,支持基于年(y)、月(M)、周(w)、日(d)、小时(h)等;timezone为选择当前时区,国内请用”Asia/Shanghai“,默认为UTC。
数据推送 定义了pipeline后,在推送数据时,使用相应的pipeline即可实现索引的自动选择。
PUT /test/_doc/1?pipeline=monthlyindex
{
"itemid": 1,
"msgtime" : "1585129599"
}
得到结果如下
{
"_index" : "test-2020-03-01",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
可以看到,该条数据自动推向了test-2020-03-01的索引。
备注 如果索引不存在,则需要自动创建,可以利用下面命令开启集群中索引的自动创建
PUT _cluster/settings
{
"persistent": {
"action.auto_create_index": true
}
}
参考
- 基于日期的自动索引:elasticsearch data index name processor