5

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

映射:

content_date:{
  "type":"date"
}

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

4

2 回答 2

0

在 Elasticsearch POV 中,文档是这样说的:

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

不确定您是否可以更改它。

于 2012-10-19T08:33:57.163 回答
0

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

"timezone" : "TimeZone.getDefault()"

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

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

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

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

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

于 2015-03-11T19:45:28.197 回答