Elasticsearch如何将日期转换为JSON字符串表示?

时间:2015-03-20 01:32:08

标签: json datetime elasticsearch

我有一个关于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    字符串"转换与日期输入无关?

1 个答案:

答案 0 :(得分:2)

源按原样存储,当您检索它时,Elasticsearch会返回您发布的同一文档。

它在索引中“存储”long类型,并使用它在内部执行查询,但是你没有看到它。

不要将来源与索引混淆。

就像索引字符串“Erik Iverson”时一样,它会保存在索引2个术语[erik] [iverson]中,但是当你检索文档时,你会得到原始字符串,因为源没有被更改