我正在尝试使用jprante's elasticsearch jdbc river索引elasticsearch中的mysql记录。我刚刚注意到日期字段中的值在索引中发生了变化。
映射:
content_date:{
"type":"date"
}
在mysql中记录的 content_date
字段 - > 2012-10-06 02:11:30
运行jdbc河后....
content_date
字段 - > 2012-10-05T20:41:30Z
河:
curl -XPUT 'localhost:9200/_riv_index/_riv_type/_meta' -d '{
"type" : "jdbc",
"jdbc" : {
"driver" : "com.mysql.jdbc.Driver",
"url" : "jdbc:mysql://localhost:3306/db",
"user" : "user",
"password" : "password",
"sql" : "select * from table where id=2409",
"poll" : "1d",
"versioning" : false
},
"index" : {
"index" : "myindex",
"type" : "mytype"
}
}'
日期格式的更改是可以接受的,但为什么日期值会发生变化? 这条河正在为mysql记录的日期添加utc时差并将其保存在elasticsearch中。如何停止此时间转换?
答案 0 :(得分:0)
来自Elasticsearch POV,这是文档所说的内容:
日期类型是一种特殊类型,它映射到JSON字符串类型。它遵循可以明确设置的特定格式。所有日期均为UTC。在内部,日期映射到数字类型long,添加的解析阶段从字符串到long,从long到string。
不确定是否可以更改它。
答案 1 :(得分:0)
此问题的解决方案是在jdbc块中使用时区
"timezone" : "TimeZone.getDefault()"
另外,我将日期和时间保存在mysql DB的单独字段中
| date | date | YES | | NULL | |
| time | time | YES | | NULL | |
Elasticsearch使用Joda timeformat来保存日期。因此它会自动将我的日期转换为日期时间。
在日期字段中,由于我没有时间,因此会自动为其添加零。
因为我需要通过Kibana显示数据,为什么我需要这种分割..我将转换后的日期和时间格式作为varchar(20)作为解决方法(我知道的坏主意)并且它现在工作正常..