2014-01-22 25 views
1

在簡單策略模式下,jdbc river插件會在添加新行時更新索引,但是如果字段值中存在更改,它會更新現有行嗎?我注意到在數據庫中沒有任何時間戳字段的映射,所以我認爲它沒有。elasticsearch jdbc river插件是否會跟蹤對mysql中現有行的更改?

+2

它更新文件或覆蓋它們,取決於版本。 – shyos

+1

關於jdbc河流處理的其他最近的答案中的一些很好的信息[其他答案/問題在這裏](http://stackoverflow.com/questions/21260086/elasticsearch-river-jdbc-mysql-not-deleting-records) – mconlin

+0

是,謝謝,我明白現在它是如何工作的。基本上,它再次重新執行查詢並基於增量,如果需要,再次用新版本更新文檔。 – dickyj

回答

0

通過使用$river.state.last_active_begin,您可以在查詢中使用時間戳,如下例所示。這將獲取自上次運行以來添加的產品行。

{ 
    "type": "jdbc", 
    "jdbc": { 
    "url": "jdbc:mysql://localhost:3306/test", 
    "user": "", 
    "password": "", 
    "sql": [ 
     { 
     "statement": "select * from \"products\" where \"mytimestamp\" > ?", 
     "parameter": [ 
      "$river.state.last_active_begin" 
     ] 
     } 
    ], 
    "index": "my_jdbc_river_index", 
    "type": "my_jdbc_river_type" 
    } 
}