2012-05-23 107 views
11

我必须包含其值是表示因为历元(又名Unix时间戳)的秒数的整数“时间”字段中的索引文件。ElasticSearch索引Unix时间戳

我一直在读ES文档,并发现这一点:

http://www.elasticsearch.org/guide/reference/mapping/date-format.html

但似乎如果我要提交UNIX时间戳,并希望他们存储在“日期”字段(整数字段对我来说没有用处),我只有两个选择:

  • 实现自己的日期格式
  • 转换为支持的格式在发送

我错过了其他选择吗?

谢谢!

回答

16

如果您提供的映射告诉ES该字段是日期,那么它可以使用纪元毫秒作为输入。如果你想ES自动检测,你必须提供ISO8601或其他可发现的格式。

更新:我还应该注意,您可以影响ES将在您的映射中识别哪些字符串作为日期。 http://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html

+2

好吧,我觉得现在的问题是,我是送秒而不是米利斯的。会尝试并回来。谢谢! – Matt

+1

工作就像一个魅力:) – Matt

+12

以供将来参考,为了ES接受这些,我可以简单地使用: “时间戳”:{“类型”:“日期”} 这创造了一个映射我索引格式为dateOptionalTime。然后我可以使用这些时间戳与kibana 3 timepicker来制作图表。 – dlants

4

如果你想使用Kibana,我期望,并根据日志/条目的时间可视化,你至少需要一个字段作为日期字段。

请注意,您必须对任何数据集的字段日期类型之前,您输入到/索引/类型。否则它将被存储为长期且不可更改。

简单的例子,可以被粘贴到marvel/sense插件:每个系列这些命令

# Make sure the index isn't there 
DELETE /logger 

# Create the index 
PUT /logger 

# Add the mapping of properties to the document type `mem` 
PUT /logger/_mapping/mem 
{ 
    "mem": { 
    "properties": { 
     "timestamp": { 
     "type": "date" 
     }, 
     "free": { 
     "type": "long" 
     } 
    } 
    } 
} 

# Inspect the newly created mapping 
GET /logger/_mapping/mem 

运行。

生成自由MEM日志

下面是一个简单的脚本回显到终端和日志到您的本地elasticsearch:

while ((1==1)); do memfree=`free -b|tail -n 1|tr -s ' ' ' '|cut -d ' ' -f4`; echo $load; curl -XPOST "localhost:9200/logger/mem" -d "{ \"timestamp\": `date +%s%3N`, \"free\": $memfree }"; sleep 1; done 

检查数据弹性搜索

中粘贴此您marvel/sense

GET /logger/mem/_search 

现在你可以移动到Kibana并做一些图表。 Kibana会自动检测你的日期字段。