ElasticSearch的Java Api基本操作入門指南

一枚程式設計師發表於2018-01-11

ElasticSearch是一個基於Lucene構建的開源,分散式,RESTful搜尋引擎框架。分散式是其最大的特點。安裝比較簡單,如果單機執行的話直接下載解壓,在命令列下執行bin/elasticsearch就行了(win的dos和linux的視窗都行)。它能夠通過http、restful、thrift等方式訪問。不過今天我們看的是使用最普通的java api來測試其功能。

 

java api
 
如果你使用java,Elasticsearch提供兩種內建的客戶端。
Node client
Transport client
 
兩種clients都和叢集通過9300埠通訊,使用本地es傳輸協議,
注意:叢集內部節點通過9300埠通訊來組成叢集。
 
java客戶端的版本必須和伺服器節點的版本一致。

 

1.獲取client例項,連線本地9300埠

1 this.client = new TransportClient()
2    
3 .addTransportAddress(new InetSocketTransportAddress(
4 "localhost"9300));

2.生成一個索引。這裡用Map來儲存json資料,然後插入到index為“twitter”的索引裡面,其document為“tweet”,id為“1”。當然,生成json資料的方法很多,朋友們可以檢視相關api。

1 public void generateIndex() {
2   Map<String, Object> json = new HashMap<String, Object>();
3   json.put("user""kimchy");
4   json.put("postDate"new Date());
5   json.put("message""trying out Elastic Search");
6  
7   IndexResponse response = this.client
8     .prepareIndex("twitter""tweet""1").setSource(json)
9     .execute().actionGet();
10  }

3.查詢某個索引 ,這個一看就明白。

1 public void getIndex() {
2   GetResponse response = client.prepareGet("twitter""tweet""1")
3     .execute().actionGet();
4   Map<String, Object> rpMap = response.getSource();
5   if (rpMap == null) {
6    System.out.println("empty");
7    return;
8   }
9   Iterator<Entry<String, Object>> rpItor = rpMap.entrySet().iterator();
10   while (rpItor.hasNext()) {
11    Entry<String, Object> rpEnt = rpItor.next();
12    System.out.println(rpEnt.getKey() + " : " + rpEnt.getValue());
13   }
14  }

4. 搜尋,建立一個termQuery查詢,該查詢要求全部匹配才會出結果,如果只要包含關鍵字裡面一部分,可以建立fieldQuery。

1 public void searchIndex() {
2  
3   QueryBuilder qb = QueryBuilders.termQuery("user""kimchy");
4   SearchResponse scrollResp = client.prepareSearch("twitter")
5           .setSearchType(SearchType.SCAN)
6           .setScroll(new TimeValue(60000))
7           .setQuery(qb)
8           .setSize(100).execute().actionGet(); //100 hits per shard will be returned for each scroll
9   //Scroll until no hits are returned
10   while (true) {
11       scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(newTimeValue(600000)).execute().actionGet();
12       for (SearchHit hit : scrollResp.getHits()) {
13        Iterator<Entry<String, Object>> rpItor = hit.getSource().entrySet().iterator();
14     while (rpItor.hasNext()) {
15      Entry<String, Object> rpEnt = rpItor.next();
16      System.out.println(rpEnt.getKey() + " : " + rpEnt.getValue());
17     }
18       }
19       //Break condition: No hits are returned
20       if (scrollResp.getHits().hits().length == 0) {
21           break;
22       }
23   }
24  }

5.刪除,刪除的時候要指定Id的,這裡指定id為1.

1 public void deleteIndex() {
2   DeleteResponse response = client.prepareDelete("twitter""tweet""1")
3           .execute()
4           .actionGet();
5  }

6.操作完畢後別忘記最後一步:關閉client連線。

1 public void closeClient() {
2   client.close();
3  }

總結:本文純粹科普級,展示了一下ElasticSearch最基本的用法。

相關文章