【问题标题】:ElasticSearch / Ruby - Date Histogram Format Returned?ElasticSearch / Ruby - 返回日期直方图格式?
【发布时间】:2012-12-31 11:30:32
【问题描述】:

我有一个 ElasticSearch 模型(由轮胎坚持,没有 ActiveRecord)。如果我查询它,我会得到一些带有某些方面的结果(如预期的那样)。

The format is: 

class Mention
  include Tire::Model::Persistence
  index_name 'mentions'

  # basic display attributes
  property :created_at, :type => 'date'
end

查询返回结果很好。当我检查返回的日期时,我得到一个字符串。

1.9.2p320 :046 > a.results[0].created_at
 => "2012-12-26T02:55:50+01:00" 
1.9.2p320 :047 > a.results[0].created_at.class
 => String 
1.9.2p320 :048 > a.results[1].created_at
 => "2012-12-26T02:55:50+01:00" 
1.9.2p320 :049 > a.results[2].created_at
 => "2012-12-26T02:56:33+01:00" 
1.9.2p320 :050 > a.results[2].created_at.class
 => String 

我有一个返回 date_histogram 的简单方面,只是为了按天检索与查询匹配的结果量。格式如下:

  facet 'volumes' do 
    date :created_at
  end

不幸的是,这似乎返回了一个疯狂的 Unix 时间戳。

1.9.2p320 :069 > d = a.helper.facets["volumes"]["entries"][0]["time"].to_s
 => "1356307200000" 
1.9.2p320 :070 > d.class
 => String 
1.9.2p320 :071 > Date.strptime(d, "%s")
 => Sun, 31 Aug 44949 
1.9.2p320 :072 > 

我一定是做错了什么。我是吗?如果是这样,是什么?

【问题讨论】:

    标签: ruby elasticsearch tire


    【解决方案1】:

    Tire 不会操纵 facet 响应,因此它会返回 Elasticsearch 返回的原始值。

    对于date_histogram facet,时间戳以自纪元以​​来的毫秒数返回。另一方面,Ruby 与 seconds since epoch 一起使用。

    您可以做的最简单的事情就是简单地除以 1000:

    >> d = a.helper.facets["volumes"]["entries"][0]["time"].to_i
    => 1356307200000
    >> Time.at(d/1000)
    => 2012-12-24 01:00:00 +0100
    

    可以说,Tire 可以/应该在这里为您进行转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多