Elasticsearch索引的創建、數據的增刪該查操作
上一章節已經在Linux系統上安裝Elasticsearch並且可以外網訪問,這節主要通過Java代碼操作Elasticsearch
1、創建Maven工程
添加pom依賴,pom.xml代碼如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sun.elasticsearch</groupId> <artifactId>Elasticsearch01</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- Elasticsearch核心依賴包 --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>5.5.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- 日志依賴 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.21</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> </dependency> <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.0</version> </dependency> </dependencies> </project>
2、通過Java程序連接Elasticsearch
需要注意的是,上一章節我們通過瀏覽器http://192.168.1.140:9200訪問可以正常訪問,這里需要知曉,9200端口是用於Http協議訪問的,如果通過客戶端訪問需要通過9300端口才可以訪問
,具體調用代碼如下
1 package com.sun.elasticsearch; 2 3 import java.net.InetAddress; 4 import java.net.UnknownHostException; 5 6 import org.elasticsearch.client.transport.TransportClient; 7 import org.elasticsearch.common.settings.Settings; 8 import org.elasticsearch.common.transport.InetSocketTransportAddress; 9 import org.elasticsearch.transport.client.PreBuiltTransportClient; 10 import org.junit.Test; 11 import org.slf4j.Logger; 12 import org.slf4j.LoggerFactory; 13 14 /** 15 * Elasticsearch的基本測試 16 * @ClassName: ElasticsearchTest1 17 * @author sunt 18 * @date 2017年11月22日 19 * @version V1.0 20 */ 21 public class ElasticsearchTest1 { 22 23 private Logger logger = LoggerFactory.getLogger(ElasticsearchTest1.class); 24 25 public final static String HOST = "192.168.1.140"; 26 27 public final static int PORT = 9300;//http請求的端口是9200,客戶端是9300 28 29 /** 30 * 測試Elasticsearch客戶端連接 31 * @Title: test1 32 * @author sunt 33 * @date 2017年11月22日 34 * @return void 35 * @throws UnknownHostException 36 */ 37 @SuppressWarnings("resource") 38 @Test 39 public void test1() throws UnknownHostException { 40 //創建客戶端 41 TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddresses( 42 new InetSocketTransportAddress(InetAddress.getByName(HOST),PORT)); 43 44 logger.debug("Elasticsearch connect info:" + client.toString()); 45 46 //關閉客戶端 47 client.close(); 48 } 49 }
3、Elasticsearch索引庫的創建
為了簡化代碼,我們在修改Junit測試類,在方法執行之前連接Elasticsearch,方法調用之后自動執行關閉Elasticsearch,通過@Before和@After注解實現,具體代碼如下
1 private Logger logger = LoggerFactory.getLogger(ElasticsearchTest2.class); 2 3 public final static String HOST = "192.168.1.140"; 4 5 public final static int PORT = 9300; //http請求的端口是9200,客戶端是9300 6 7 private TransportClient client = null; 8 /** 9 * 獲取客戶端連接信息 10 * @Title: getConnect 11 * @author sunt 12 * @date 2017年11月23日 13 * @return void 14 * @throws UnknownHostException 15 */ 16 @SuppressWarnings({ "resource", "unchecked" }) 17 @Before 18 public void getConnect() throws UnknownHostException { 19 client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddresses( 20 new InetSocketTransportAddress(InetAddress.getByName(HOST),PORT)); 21 logger.info("連接信息:" + client.toString()); 22 } 23 24 /** 25 * 關閉連接 26 * @Title: closeConnect 27 * @author sunt 28 * @date 2017年11月23日 29 * @return void 30 */ 31 @After 32 public void closeConnect() { 33 if(null != client) { 34 logger.info("執行關閉連接操作..."); 35 client.close(); 36 } 37 }
創建索引庫:
/** * 創建索引庫 * @Title: addIndex1 * @author sunt * @date 2017年11月23日 * @return void * 需求:創建一個索引庫為:msg消息隊列,類型為:tweet,id為1 * 索引庫的名稱必須為小寫 * @throws IOException */ @Test public void addIndex1() throws IOException { IndexResponse response = client.prepareIndex("msg", "tweet", "1").setSource(XContentFactory.jsonBuilder() .startObject().field("userName", "張三") .field("sendDate", new Date()) .field("msg", "你好李四") .endObject()).get(); logger.info("索引名稱:" + response.getIndex() + "\n類型:" + response.getType() + "\n文檔ID:" + response.getId() + "\n當前實例狀態:" + response.status()); }
PS: 索引庫名稱必須為小寫,如果為大寫會包如下錯誤信息
第二、Elasticsearch是5.5.2版本,最新的6.0版本代碼運行會報如下錯誤,折騰了半天還是沒有調試成功,最后無奈只能換為5.5.2版本,
這里重點說明,可能當初寫的比較粗略,這里指得版本號是安裝軟件的版本號,maven版本號最好跟軟件的大版本號保持一致
此時運行代碼控制台打印出如下結果,說明此時已經在ElasticSearch中創建成功一個為msg的索引庫
4、向索引庫中添加json字符串
1 /** 2 * 添加索引:傳入json字符串 3 * @Title: addIndex2 4 * @author sunt 5 * @date 2017年11月23日 6 * @return void 7 */ 8 @Test 9 public void addIndex2() { 10 String jsonStr = "{" + 11 "\"userName\":\"張三\"," + 12 "\"sendDate\":\"2017-11-30\"," + 13 "\"msg\":\"你好李四\"" + 14 "}"; 15 IndexResponse response = client.prepareIndex("weixin", "tweet").setSource(jsonStr,XContentType.JSON).get(); 16 logger.info("json索引名稱:" + response.getIndex() + "\njson類型:" + response.getType() 17 + "\njson文檔ID:" + response.getId() + "\n當前實例json狀態:" + response.status()); 18 19 }
執行結果如下:CREATED說明向索引庫添加數據成功
5、向索引庫添加一個Map集合
1 /** 2 * 創建索引-傳入Map對象 3 * @Title: addIndex3 4 * @author sunt 5 * @date 2017年11月23日 6 * @return void 7 */ 8 @Test 9 public void addIndex3() { 10 Map<String, Object> map = new HashMap<String,Object>(); 11 map.put("userName", "張三"); 12 map.put("sendDate", new Date()); 13 map.put("msg", "你好李四"); 14 15 IndexResponse response = client.prepareIndex("momo", "tweet").setSource(map).get(); 16 17 logger.info("map索引名稱:" + response.getIndex() + "\n map類型:" + response.getType() 18 + "\n map文檔ID:" + response.getId() + "\n當前實例map狀態:" + response.status()); 19 }
執行結果:
6、向索引庫添加JsonObject
1 /** 2 * 傳遞json對象 3 * 需要添加依賴:gson 4 * @Title: addIndex4 5 * @author sunt 6 * @date 2017年11月23日 7 * @return void 8 */ 9 @Test 10 public void addIndex4() { 11 JsonObject jsonObject = new JsonObject(); 12 jsonObject.addProperty("userName", "張三"); 13 jsonObject.addProperty("sendDate", "2017-11-23"); 14 jsonObject.addProperty("msg","你好李四"); 15 16 IndexResponse response = client.prepareIndex("qq", "tweet").setSource(jsonObject, XContentType.JSON).get(); 17 18 logger.info("jsonObject索引名稱:" + response.getIndex() + "\n jsonObject類型:" + response.getType() 19 + "\n jsonObject文檔ID:" + response.getId() + "\n當前實例jsonObject狀態:" + response.status()); 20 }
執行結果:
7、從索引庫獲取數據
1 /** 2 * 從索引庫獲取數據 3 * @Title: getData1 4 * @author sunt 5 * @date 2017年11月23日 6 * @return void 7 */ 8 @Test 9 public void getData1() { 10 GetResponse getResponse = client.prepareGet("msg", "tweet", "1").get(); 11 logger.info("索引庫的數據:" + getResponse.getSourceAsString()); 12 }
執行結果:
8、更新索引庫數據
/** * 更新索引庫數據 * @Title: updateData * @author sunt * @date 2017年11月23日 * @return void */ @Test public void updateData() { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("userName", "王五"); jsonObject.addProperty("sendDate", "2008-08-08"); jsonObject.addProperty("msg","你好,張三,好久不見"); UpdateResponse updateResponse = client.prepareUpdate("msg", "tweet", "1") .setDoc(jsonObject.toString(),XContentType.JSON).get(); logger.info("updateResponse索引名稱:" + updateResponse.getIndex() + "\n updateResponse類型:" + updateResponse.getType() + "\n updateResponse文檔ID:" + updateResponse.getId() + "\n當前實例updateResponse狀態:" + updateResponse.status()); }
執行結果:
更新結束之后,再次調用從索引庫獲取數據執行結果如下:
9、刪除索引庫的數據
1 /** 2 * 根據索引名稱,類別,文檔ID 刪除索引庫的數據 3 * @Title: deleteData 4 * @author sunt 5 * @date 2017年11月23日 6 * @return void 7 */ 8 @Test 9 public void deleteData() { 10 DeleteResponse deleteResponse = client.prepareDelete("msg", "tweet", "1").get(); 11 12 logger.info("deleteResponse索引名稱:" + deleteResponse.getIndex() + "\n deleteResponse類型:" + deleteResponse.getType() 13 + "\n deleteResponse文檔ID:" + deleteResponse.getId() + "\n當前實例deleteResponse狀態:" + deleteResponse.status()); 14 }
執行結果:
刪除之后再次執行從索引庫獲取數據,結果如下
索引庫的數據變為null了,說明刪除成功
歡迎各位加群討論:534073451
最新更新地址: https://www.sunnyblog.top/index.html
我的博客即將同步至騰訊雲+社區,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=28ksbsiji2m8o