jprante elasticsearch jdbc river更改日期值

时间:2012-10-19 07:35:15

标签: jdbc elasticsearch elasticsearch-jdbc-river

我正在尝试使用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中。如何停止此时间转换?

2 个答案:

答案 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)作为解决方法(我知道的坏主意)并且它现在工作正常..