6

ツイートのインデックスを作成していて、created_at フィールドを日付にマップしたいと考えています。日付の例は次のようになります。

'created_at': 'Wed Sep 21 05:19:16 +0000 2011'

JODA時間形式を使用すると、次のことがわかりました。

"format" : "EEE MMM dd HH:mm:ss +SSSS yyyy",

ただし、新しいツイートをインデックスに登録しようとすると、次のエラーが発生します。

{u'status': 400, u'error': u'RemoteTransportException[[Rattler][inet[/192.155.85.243:9301]][index]]; nested: MapperParsingException[Failed to parse [created_at]]; nested: MapperParsingException[failed to parse date field [2013-04-30 20:34:43], tried both date format [yyyyMMdd HH:mm:ss], and timestamp number]; nested: IllegalArgumentException[Invalid format: "2013-04-30 20:34:43" is malformed at "-04-30 20:34:43"]; '}

使用する日付形式を変更してみました

yyyy-MM-dd HH:mm:ss
EEE, dd MMM yyyy HH:mm:ss Z
EEE dd MMM yyyy HH:mm:ss Z
EEE MMM dd HH:mm:ss +0000 yyyy

、および他のいくつかのバリエーションを見るだけで、運はありません。次の呼び出しを使用して、最初のツイート ドキュメントを作成しています。

curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
    "tweet" : {
        "properties" : {
            "created_at" : {"type" : "date", "format" : "EEE dd MMM yyyy HH:mm:ss Z"}
        }
    }
}'

どんな助けでも大歓迎です!

4

1 に答える 1

10

指定した Joda 時刻形式は完全に正しくありません。S は、必要に応じてタイムゾーンではなく、秒の端数を表します。また、「+」記号はタイムゾーン パーサーに含まれています。

この形式指定子を使用して、elasticsearch で Twitter の日付形式を解析できました。

"format": "EE MMM d HH:mm:ss Z yyyy"
于 2013-06-16T17:13:32.280 に答える