我有一个关于Elasticsearch如何将日期转换为JSON字符串表示的问题。我在这个例子中使用的是版本1.4.2。
首先,POST一个简单的文档,其中包含一个名为' postDate'的日期字段。到了myindex'使用类型' datetest':
curl -XPOST "http://localhost:9200/myindex/datetest/" -d'
{
"content": "Hello World!",
"postDate": "2009-11-15T14:12:12"
}'
我们可以查看自动生成的postDate的字段映射。
curl -XGET "http://localhost:9200/myindex/_mapping/"
##postDate":{"type":"date","format":"dateOptionalTime"}
现在让我们发布另一份文件。这次postDate包含UTC偏移量。
curl -XPOST "http://localhost:9200/myindex/datetest/" -d'
{
"content": "Hello World!",
"postDate": "2009-11-15T14:12:12-07:00"
}'
现在,让我们检索上面创建的文档:
curl -XGET 'http://localhost:9200/myindex/datetest/_search?q=Hello'
"hits": {
"total": 2,
"max_score": 0.11506981,
"hits": [
{
"_index": "myindex",
"_type": "datetest",
"_id": "AUw0TyJgqFHXxhSON3r8",
"_score": 0.11506981,
"_source": {
"content": "Hello World!",
"postDate": "2009-11-15T14:12:12"
}
},
{
"_index": "myindex",
"_type": "datetest",
"_id": "AUw0VIQbqFHXxhSON3r-",
"_score": 0.095891505,
"_source": {
"content": "Hello World!",
"postDate": "2009-11-15T14:12:12-07:00"
}
}
]
}
您会看到postDate的格式与返回的每个文档完全相同。这让我很困惑。根据,
http://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-core-types.html
"日期类型是一种特殊类型,它映射到JSON字符串类型。它 遵循可以明确设置的特定格式。 所有日期都是 世界标准时间。在内部,日期映射到数字类型长,添加 解析阶段从字符串到长,从长到字符串。" (强调我的)
我的两个问题是:
1)因为,"在内部,日期映射到数字类型长",如何或在何处 elasticsearch存储关于日期的元信息 发货?
2)我能否为日期指定输出格式, 无论他们如何张贴。也就是说,我可以控制" long 字符串"转换与日期输入无关?
答案 0 :(得分:2)
源按原样存储,当您检索它时,Elasticsearch会返回您发布的同一文档。
它在索引中“存储”long类型,并使用它在内部执行查询,但是你没有看到它。
不要将来源与索引混淆。
就像索引字符串“Erik Iverson”时一样,它会保存在索引2个术语[erik] [iverson]中,但是当你检索文档时,你会得到原始字符串,因为源没有被更改