MySQL和ES是兩個常用的數據庫。在一些特定場景下,需要將MySQL中的數據同步到ES中,以便更方便的進行數據查詢和搜索。下面我們來介紹一下如何使用Java代碼實現MySQL向ES的同步。
首先,需要在Java項目中引入兩個依賴:elasticsearch和mysql-connector-java。具體添加方法可以在maven中添加以下依賴:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
然后我們需要連接上MySQL和ES。MySQL連接代碼如下:
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, username, password);
ES連接代碼如下:
TransportClient transportClient = TransportClient.builder().build()
.addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(ipPort)));
其中,url、username、password、ipPort分別為MySQL數據庫的url、用戶名、密碼,ES節點的ip和端口號。
接下來就是實現數據同步的代碼了。首先我們需要從MySQL中讀取數據:
String sql = "SELECT * FROM table";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
然后遍歷結果集,將每一條數據存儲到ES中:
while (rs.next()) {
IndexRequest indexRequest = new IndexRequest(index, type, rs.getString("id")).source(
"{\"title\":\"" + rs.getString("title") + "\",\"content\":\"" + rs.getString("content") + "\"}",
XContentType.JSON);
transportClient.index(indexRequest).actionGet();
}
其中,IndexRequest是ES中的一個類,用來保存要存儲的數據。這里將title和content兩個字段存儲到ES中。transportClient是ES中的一個連接對象,用來提交數據到ES集群中。
這樣,就實現了從MySQL到ES的數據同步。
總的來說,使用Java代碼實現MySQL向ES的數據同步并不復雜。只需要連接上MySQL和ES,然后遍歷MySQL中的數據,逐一存儲到ES中即可。通過這種方法,可以更方便地進行數據查詢和搜索。