2012-12-31 68 views
3

我有一個ElasticSearch模型(由Tire持續,沒有ActiveRecord)。如果我查詢它,我會得到一些結果(如預期)。ElasticSearch/Ruby - 返回日期柱狀圖格式?

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 > 

我必須做錯事。我是嗎?如果是這樣,什麼?

回答

7

輪胎不處理方面響應,因此它返回Elasticsearch返回的原始值。

對於date_histogram方面,時間戳返回爲毫秒的數字自epoch以來。另一方面,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 

按理說,輪胎可以/應該爲你做的轉換這裏。

+0

是的。而已。 – Williamf