2016-03-02 61 views
1

最好的辦法我有ES 2.2和安裝JDBC進口商爲Elasticsearch elasticsearch-jdbc-2.2.0.0,並已能夠插入數據,但沒有與MySQL中的變化,即更新ES。 MySQL與ES同步。我如何進行同步?我一次執行了下面的shell腳本,數據正確插入,但調度程序工作正常。它不會每分鐘執行一次捕獲mysql(計劃表)中的任何更改。腳本中是否有錯誤?或任何可用的解決方法?什麼是從MySQL的數據同步到彈性搜索

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
bin=${DIR}/bin 
lib=${DIR}/lib 
echo $lib 
echo $bin 

echo '{ 
"type" : "jdbc", 
"autocommit" : true, 
"schedule" : "0 0-59 0-23 ? * *", 
"jdbc" : { 
"driver": "com.mysql.jdbc.Driver", 
"url" : "jdbc:mysql://XXX:3306/blahblah", 
"user" : "abc", 
"password" : "xyz", 
"sql" : "select * from schemes", 
"elasticsearch" : { 
"cluster" : "mycluster", 
"host" : "localhost", 
"port" : 9300 
}, 
"max_bulk_actions" : 20000, 
"max_concurrent_bulk_requests" : 10, 
"index" : "movies", 
"type":"scheme" 
} 
} 
' | java -cp "${lib}/*" -Dlog4j.configurationFile=${bin}/log4j2.xml org.xbib.tools.Runner org.xbib.tools.JDBCImporter 
+0

你的活動記錄我會建議使用Logstash [JDBC-輸入(https://www.elastic.co/guide/en/logstash/current/plugins- inputs-jdbc.html)插件。 – Roopendra

+0

謝謝roopendra,這很有用。我用你的建議。現有行上的更新工作正常。但我怎麼照顧刪除的行的MySQL中,這些記錄不得到從elasticsearch在conf文件的後續執行刪除。希望你明白了我的觀點。 – Mike

回答

3

我建議使用Logstash jdbc-plugin將MySQL數據同步到Elasticsearch。

從作爲對手詢問如何刪除的記錄從MySQL同步到Elasticsearch

可能是一些其他有效的方法來從MySQL同步刪除記錄Elasticsearch :)不過我在這裏分享我所做的評論。

第1步: 讓我們以架構表爲例。添加一列以維護該模式的狀態。喜歡的東西status = 0(默認)和status = 1(已刪除)。還有一列是updated_date。刪除任何記錄時,將status = 1和updated_date更改爲當前日期。

第2步:

我們不需要每次都同步整個數據。索引完整的數據一次,然後更改mysql查詢以獲取最近24小時的記錄或適合您的用例的任何時間間隔。

第3步:更改查詢,以便從過去24小時內只

select * from schemes where (updated_date >= FROM_UNIXTIME(UNIX_TIMESTAMP(?)-86400,"%Y-%m-%d")) 

現在你刪除的數據狀態會在你Elasticsearch指數改爲狀態= 1獲取數據。

所以,你可以查詢像

{ 
    "query": { 
     "filtered": { 
      "filter": { 
       "bool": { 
        "must": [ 
         { 
          "term": { 
          "status": 1 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 
相關問題