2012-10-19 25 views
5

我想索引mysqlsearch記錄在elasticsearch使用jprante's elasticsearch jdbc river。我只注意到日期字段中的值在索引中發生了變化。jprante elasticsearch jdbc河更改日期值

映射:

content_date:{ 
    "type":"date" 
} 

content_date在MySQL領域的紀錄 - >2012-10-06 02:11:30

在elasticsearch運行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" 
    } 
}' 

更改日期格式是可以接受的,但是爲什麼日期值發生變化? 河流正在將utc時間差異添加到mysql記錄的日期並將其保存在elasticsearch中。如何停止此次轉換?

+0

還在發生,你是如何解決這個問題的? – tostasqb

+0

我掙扎着同樣的問題..任何人如何解決它http://serverfault.com/questions/674399/elasticsearch-river-jdbc-inserting-duplicate-record-in-mysql-db/674681#674681 –

回答

0

從Elasticsearch POV,這裏的文檔說的:

日期類型是一種特殊類型映射到JSON字符串類型。它遵循可以明確設置的特定格式。所有日期均爲UTC。在內部,一個日期映射到一個數字類型long,並且增加了從字符串到長字符以及從long到string的解析階段。

不確定你是否可以改變它。

0

解決此問題是使用時區在JDBC塊

"timezone" : "TimeZone.getDefault()" 

而且我在mysql中保存日期和時間在不同的領域數據庫

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

Elasticsearch使用喬達TIMEFORMAT保存日期。因此它會自動將我的日期轉換爲日期時間。

在日期字段中,由於我沒有時間,它會自動將零加到它。

因爲我需要通過Kibana顯示的數據就是爲什麼我需要這個split..I轉換日期和時間爲varchar(20)的格式作爲一種解決方法(壞主意,我知道)和它現在做工精細..