3

ElasticSearch モデルがあります (Tire によって保持され、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 > 

私は何か間違ったことをしなければなりません。私ですか?もしそうなら、何?

4

1 に答える 1

7

Tire はファセット レスポンスを操作しないため、Elasticsearch によって返された生の値を返します。

ファセットの場合date_histogram、タイムスタンプはエポックからのミリ秒数として返されます。一方、Ruby はepoch からの秒数で動作します。

最も簡単にできることは、単純に 1000 で割ることです。

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

おそらく、タイヤはここで変換を行うことができます/行う必要があります.

于 2012-12-31T14:21:18.700 に答える