【问题标题】:jprante elasticsearch jdbc river changing the date valuejprante elasticsearch jdbc River 更改日期值
【发布时间】:2012-10-19 07:35:15
【问题描述】:

我正在尝试使用jprante's elasticsearch jdbc river 在 elasticsearch 中索引 mysql 记录。我刚刚注意到日期字段中的值在索引中发生了变化。

映射:

content_date:{
  "type":"date"
}

content_date mysql 中记录的字段 -> 2012-10-06 02:11:30

跑完jdbc河...

content_dateelasticsearch 中相同记录的字段 -> 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中。如何停止此时间转换?

【问题讨论】:

标签: jdbc elasticsearch elasticsearch-jdbc-river


【解决方案1】:

来自 Elasticsearch POV,文档是这样说的:

日期类型是映射到 JSON 字符串类型的特殊类型。它遵循可以显式设置的特定格式。所有日期均为 UTC。在内部,日期映射到数字类型 long,并增加了从 string 到 long 以及从 long 到 string 的解析阶段。

不确定是否可以更改。

【讨论】:

    【解决方案2】:

    这个问题的解决方案是在 jdbc 块中使用时区

    "timezone" : "TimeZone.getDefault()"
    

    我还在 mysql DB 的单独字段中保存日期和时间

    | date | date | YES | | NULL | |
    | time | time | YES | | NULL | |
    

    Elasticsearch 使用 Joda 时间格式来保存日期。因此它会自动将我的日期转换为日期时间。

    在日期字段中,由于我没有时间,它会自动添加零。

    因为我需要通过 Kibana 显示数据,所以我需要这种拆分..我将日期和时间的格式转换为 varchar(20) 作为一种解决方法(我知道这是个坏主意),现在它工作正常..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 2013-10-04
      相关资源
      最近更新 更多