[elasticsearch]如何在索引時替 record 自動加上 timestamp


如何在索引的同時替每筆 record 都加上 timestamp ?

典型的作法可能會有兩種:

  • 把 record post 到 Elasticsearch前就先加上 timestamp欄位,所以這個timestamp 是您自己的應用服務處理該條 record的時間。若您使用 logstash 來做 logs indexing 的操作, logstash會替你加上 @timestamp 這個欄位。
  • Elasticsearch 的 mapping 內有個 _timestamp ,只要在 put mapping 時 啟用這個欄位,索引時就會自動把索引時間加入 records中。


用法如下,

{
    "logs" : {
        "_timestamp" : { "enabled" : true }
    }
}

_timestamp 欄位預設在 index setting中 “store" 是設為 false , “index" 屬性設為 not_analyzed 。

create index
PUT http://localhost:9200/indextest
  • put mapping
PUT http://localhost:9200/indextest/logs/
{
    "logs" : {
        "_timestamp" : { "enabled" : true }
    }
}
  • post data to index
POST http://localhost:9200/indextest/logs
{
    "name" : "elasticsearch"
}
  • search docs
GET http://localhost:9200/indextest/logs/_search?q=*&fields=_timestamp,_source

{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "indextest",
"_type": "logs",
"_id": "0AXft-9gTK-DUdfEvUZFiQ",
"_score": 1,
"_source": {
"name": "elasticsearch"
},
"fields": {
"_timestamp": 1410870337057
}
}
]
}
}

這裡必須要注意的就是,在search 時必須指定 _timestamp的欄位,返回的內容才會包含 “_timestamp" 欄位。這個時間就是 Elasticsearch index 時加上的時間。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

w

連結到 %s