我必须索引包含“时间”字段的文档,该字段的值是一个整数,表示自纪元以来的秒数(又名 unix 时间戳)。
我一直在阅读 ES 文档并发现了这一点:
http://www.elasticsearch.org/guide/reference/mapping/date-format.html
但似乎如果我想提交 unix 时间戳并将它们存储在“日期”字段中(整数字段对我没有用),我只有两个选择:
- 实现我自己的日期格式
- 在发件人处转换为支持的格式
我还有其他选择吗?
谢谢!
我必须索引包含“时间”字段的文档,该字段的值是一个整数,表示自纪元以来的秒数(又名 unix 时间戳)。
我一直在阅读 ES 文档并发现了这一点:
http://www.elasticsearch.org/guide/reference/mapping/date-format.html
但似乎如果我想提交 unix 时间戳并将它们存储在“日期”字段中(整数字段对我没有用),我只有两个选择:
我还有其他选择吗?
谢谢!
如果你提供一个映射告诉 ES 该字段是一个日期,它可以使用 epoch millis 作为输入。如果您希望 ES 自动检测,则必须提供 ISO8601 或其他可发现的格式。
更新:我还应该注意,您可以影响 ES 将哪些字符串识别为映射中的日期。http://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html
如果您想使用我期望的 Kibana,并根据日志/条目的时间进行可视化,您将需要至少一个字段作为日期字段。
请注意,在将任何数据输入 /index/type 之前,您必须将该字段设置为日期类型。否则它将被存储为长期且不可更改的。
可以粘贴到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
依次运行这些命令中的每一个。
这是一个简单的脚本,它回显到您的终端并记录到您的本地弹性搜索:
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
将此粘贴到您的奇迹/感觉中
GET /logger/mem/_search
现在您可以转移到 Kibana 并制作一些图表。Kibana 将自动检测您的日期字段。