2013-04-30 38 views
5

Tôi đang lập chỉ mục các mẩu tin và muốn ánh xạ trường created_at thành một ngày. Một ngày ví dụ như sau:ElasticSearch không ánh xạ định dạng thời gian JODA

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

mà sử dụng định dạng thời gian Joda, tôi đã tìm ra được:

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

Tuy nhiên, khi cố gắng index một tweet mới tôi nhận được lỗi sau:

{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"]; '} 

tôi đã cố gắng thay đổi định dạng ngày sử dụng

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 

và một số biến thể khác để chỉ xem và không có may mắn. Tôi đang sử dụng cuộc gọi sau đây để tạo tài liệu tweet ban đầu:

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

Bất kỳ trợ giúp nào được đánh giá cao!

+0

Bạn có thể gửi một ví dụ về các kỷ lục thất bại? – imotov

Trả lời

9

Định dạng thời gian Joda bạn chỉ định không hoàn toàn chính xác. S là một phần của giây, không phải múi giờ như bạn muốn. Dấu "+" cũng được bao gồm trong trình phân tích cú pháp múi giờ.

tôi quản lý để phân tích định dạng ngày twitter trong elasticsearch với format specifier này:

"format": "EE MMM d HH:mm:ss Z yyyy" 
Các vấn đề liên quan