Java中使用elasticsearch搜尋引擎實現簡單、修改等操作
阿新 • • 發佈:2018-11-08
以下的操作環境為:jdk:1.8;elasticsearch:5.2.0
maven架包下載座標為:
<dependency> <groupId>org.elasticsearch.plugin</groupId> <artifactId>transport-netty4-client</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>org.nlpcn</groupId> <artifactId>elasticsearch-sql</artifactId> <version>6.3.0.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.9</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>5.2.0</version> </dependency>
Java建立ES連線工具類:
//建立連線工具類 public class ESClientConnectionUtil { public static TransportClient client=null; public final static String HOST = "192.168.200.211"; //伺服器部署 public final static Integer PORT = 9301; //埠 public static TransportClient getESClientConnection(){ if (client == null) { System.setProperty("es.set.netty.runtime.available.processors", "false"); try { //設定叢集名稱 Settings settings = Settings.builder().put("cluster.name", "es5").put("client.transport.sniff", true).build(); //建立client client = newPreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(HOST), PORT)); } catch (Exception ex) { ex.printStackTrace(); System.out.println(ex.getMessage()); } } return client; } }
用Java命令想elasticsearch中插入資料
public Map<String,Object> addTopic(KnowledgeTopicDTO knowledgeTopicDTO){ Map<String,Object> map = new HashMap<>(); //連線ES TransportClient transportClient = ESClientConnectionUtil.getESClientConnection(); JSONObject json = JSONObject.fromObject(knowledgeTopicDTO);//後臺傳過來的物件資料轉換成json格式 try{ //index 索引名稱(相當於資料庫) type :型別(相當於資料庫中的表) IndexResponse response = transportClient.prepareIndex("knowledge", "knowledge_theme").setSource(json, XContentType.JSON).get(); if(null !=response.getId()){ map.put("code",200); return map; } }catch (Exception e){ e.printStackTrace(); map.put("code",500); return map; } return null; }
使用Java根據id查詢資料
//連線ES TransportClient transportClient = ESClientConnectionUtil.getESClientConnection(); //引數:索引名,型別(type) id GetResponse response = client.prepareGet("knowledge", "knowledge_theme", "1") .setOperationThreaded(false) // 執行緒安全 .get();
根據id進行修改資料
//knowledgeTopic為修改資料的物件 //修改狀態後的物件轉換成json資料 JSONObject fromObject= JSONObject.fromObject(knowledgeTopic); //引數:索引名,型別(type) id 要修改的json資料:fromObject UpdateResponse updateResponse = client.prepareUpdate("knowledge", "knowledge_theme", "1") .setDoc(fromObject).get();
ES模糊查詢
SearchResponse searchResponse=null; //連線elasticsearch TransportClient transportClient = ESClientConnectionUtil.getESClientConnection(); searchResponse = client.prepareSearch() .setIndices("knowledge") .setTypes("knowledge_theme") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setScroll(TimeValue.timeValueMinutes(30)) //遊標維持時間 .setSize(2 * 5)//實際返回的數量為10*index的主分片數 .setQuery(QueryBuilders.wildcardQuery("name", ("*"+name+"*").toLowerCase())) //查詢的欄位名及值 .execute() .actionGet();
以上功能本人已親測過,都能實現,希望這對大家有所幫助