该 processor(处理器)的目的是通过使用 date math index name support 来将文档指向正确的时间以建立 index(索引),该 date(时间)基于 document(文档)中的 date(日期)或 timestamp(时间戳)字段。
该 processor(处理器)根据提供的 index name prefix(索引名称前缀),正在被处理的 document(文档)中的 date(日期)或 timestamp(时间戳)字段以及所提供的 date rounding(日期舍入),与 a date math index name expression(一个日期的数学表达式索引名称)来设置 _index meta field(元字段)。
首先,该 processor(处理器)从正在处理的 document(文档)中的 field(字段)抓取 date(日期)或 timestamp(时间戳)。或者,可以配置 date formatting(日期格式)以便如何将 field's value(字段的值)解析成 date(日期)。那么这个 date(日期),所提供的 index name prefix(索引名称前缀)和所提供的 date rounding(日期舍入)将会被格式化为 a date math index name expression(一个日期的数学表达式索引名称)。此外,还可以选择 date formatting(日期格式化)以指定 date(日期)应该如何被格式化成 a date math index name expression(一个日期的数学表达式索引名称)。
以下一个示例 pipeline(管道),它将 documents(文档)指向基于 date1 字段中日期的,以 myindex- 前缀开头的 monthly index(月度索引):
curl -XPUT 'localhost:9200/_ingest/pipeline/monthlyindex?pretty' -H 'Content-Type: application/json' -d'
{
"description": "monthly date-time index naming",
"processors" : [
{
"date_index_name" : {
"field" : "date1",
"index_name_prefix" : "myindex-",
"date_rounding" : "M"
}
}
]
}
'
针对 index request(索引请求)使用该 pipeline(管道):
curl -XPUT 'localhost:9200/myindex/type/1?pipeline=monthlyindex&pretty' -H 'Content-Type: application/json' -d'
{
"date1" : "2016-04-25T12:02:01.789Z"
}
'
{
"_index" : "myindex-2016-04-01",
"_type" : "type",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"created" : true
}
以上请求将不会将此 document(文档)放入 myindex 索引,而是放入到 myindex-2016-04-01 索引中,因为它 rounded by month(按月舍入)。产生这样的结果是因为 date-index-name-processor(日期索引名称处理器)覆盖了 document(文档)的 _index 属性。
为了查看实际的 index request(索引请求)中提供给 index(索引)的 date-math 值,导致上述 document(文档)被索引到 myindex-2016-04-01 中,我们可以使用 simulate request(模拟请求)来检查 processor(处理器)的效果。
curl -XPOST 'localhost:9200/_ingest/pipeline/_simulate?pretty' -H 'Content-Type: application/json' -d'
{
"pipeline" :
{
"description": "monthly date-time index naming",
"processors" : [
{
"date_index_name" : {
"field" : "date1",
"index_name_prefix" : "myindex-",
"date_rounding" : "M"
}
}
]
},
"docs": [
{
"_source": {
"date1": "2016-04-25T12:02:01.789Z"
}
}
]
}
'
结果如下 :
{
"docs" : [
{
"doc" : {
"_id" : "_id",
"_index" : "<myindex-{2016-04-25||/M{yyyy-MM-dd|UTC}}>",
"_type" : "_type",
"_source" : {
"date1" : "2016-04-25T12:02:01.789Z"
},
"_ingest" : {
"timestamp" : "2016-11-08T19:43:03.850+0000"
}
}
}
]
}
上述示例 index(索引)已设置为 <myindex-{2016-04-25||/M{yyyy-MM-dd|UTC}}>。Elasticsearch 理解这个意思,2016-04-01 正如 date math index name documentation 所描述的那样。
Name(名称) | Required(必要的) | Default(默认值) | Description(描述) |
---|---|---|---|
field |
yes | - | 获取 date(日期)或 timestamp(时间戳)的 field(字段)。 |
index_name_prefix |
no | - | 在打印日期之前要添加的 index name(索引名称)的前缀。 |
date_rounding |
yes | - | 在格式化 date(日期)为 index name(索引名称)时如何舍入日期。有效值是 : y (year), M (month), w (week), d (day), h (hour), m (minute) and s (second)。 |
date_formats |
no | yyyy-MM-dd’T'HH:mm:ss.SSSZ | 预处理 document(文档)中用于解析 dates(日期) / timestamps(时间戳)的预期的 date formats(日期格式)的 array(数组)。可以是 Joda pattern 或者以下格式之一 : ISO8601,UNIX,UNIX_MS 或 TAI64N。 |
timezone |
no | UTC | 在解析 date(日期)以及当 date math index(日期数学索引)支持解析表达式到具体的 index name(索引名称)时所使用的 timezone(时区)。 |
locale |
no | ENGLISH | 在从预处理文档中解析 date(日期)时要用的 locale(语言环境),与解析的 month names 或 week days 有关。 |
index_name_format |
no | yyyy-MM-dd | 在打印 parsed date(解析的日期)到 index name(索引名称)时要使用的格式。这里预期是一个有效的 Joda pattern。 |