Elasticsearch java api 基本使用之增、刪、改、查
阿新 • • 發佈:2019-02-11
主要參考el的java官方文件:https://www.elastic.co/guide/en/elasticsearch/client/java-api/1.7/generate.html
一篇部落格:http://www.cnblogs.com/huangfox/p/3543134.html
Elasticsearch官方指南:http://es.xiaoleilu.com/010_Intro/30_Tutorial_Search.html
主要概念
明白如下幾個名詞,就像上一篇中提到的那樣,索引(indices)->資料庫、型別(types)->表、文件(documents)->行、欄位(Fields)->列;其中->後面代表的是基本的關係型資料庫的表。
基本的依賴的jar包,在elasticsearch資料夾下對應的lib的資料夾中含有;其中json的檔案依賴jar包的下載地址http://wiki.fasterxml.com/JacksonDownload。
遇到的問題及解決方法
client = new TransportClient().addTransportAddress(new InetSocketTransportAddress(“192.168.203.148”, 9200));
報錯No node available
解決方法:這裡9200 改寫成9300
程式碼
建立index並插入資料
程式碼如下所示:<pre name="code" class="html"><pre name="code" class="html">package com.asia.myTest; import java.io.IOException; import net.sf.json.JSONObject; import org.elasticsearch.action.*; import org.apache.lucene.search.TermQuery; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.util.JSONPObject; import org.elasticsearch.ElasticsearchException; import org.elasticsearch.action.count.CountResponse; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.index.query.FilterBuilders; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders.*; import static org.elasticsearch.index.query.FilterBuilders.*; public class ESClient { private Client client; public void init(){ //on start相當於連線叢集 client = new TransportClient(). addTransportAddress(new InetSocketTransportAddress("192.168.203.148", 9300)); } public void close(){ //on shutdown 斷開叢集 client.close(); } /* *建立index,把其中的文件轉化為json的格式儲存 */ public void createIndex() { for (int i=0; i<=200;i++){ IndexResponse indexResponse = null; try { indexResponse = client.prepareIndex("logs", "log2015",i+"") .setSource( XContentFactory.jsonBuilder().startObject() .field("sourceIp" , "10.10.16."+i) .field("sourcePort" , 389) .field("destIp" , "114.114.114.114") .endObject()) .execute() .actionGet(); } catch (ElasticsearchException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("responseIsCreated: "+indexResponse.isCreated()); } System.out.println("it is ok !"); } /* * Get index 獲取文件相當於讀取資料庫的一行資料 */ public void get(){ GetResponse getresponse = client.prepareGet("logs", "log2015", "1") .execute() .actionGet(); System.out.println(getresponse.getSourceAsString()); } /* *Delete index 刪除文件,相當於刪除一行資料 */ public void delete(){ DeleteResponse deleteresponse = client.prepareDelete("logs", "log2015","150") .execute() .actionGet(); System.out.println(deleteresponse.getVersion()); } /* *search 查詢相當於關係型資料庫的查詢 */ public void search(){ SearchResponse searchresponse = client.prepareSearch("logs") .setTypes("log2015") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(QueryBuilders.termQuery("destIp", "114.114.114.114")) .setPostFilter( FilterBuilders.rangeFilter("sourceIp") .from("10.10.16.57") .to("10.10.16.68") ) .setFrom(0) .setSize(3).setExplain(true) .execute().actionGet(); System.out.println(searchresponse.toString()); // JSONObject jsonObject = JSONObject.fromObject(searchresponse.toString()); // JSONObject hites = (JSONObject) jsonObject.get("hits"); // System.out.println(hites.get("hits").toString()); } /* *Count api 統計分析結果 */ public void count(){ CountResponse countresponse = client.prepareCount("website") .setQuery(QueryBuilders.termQuery("_type", "asia")) .execute() .actionGet(); System.out.println(countresponse.getCount()); } public static void main(String[] args){ ESClient client = new ESClient(); client.init(); //client.createIndex(); //client.get(); //client.delete(); //client.search(); client.count(); client.close(); } }
控制檯執行過程: ....... responseIsCreated: true responseIsCreated: true
responseIsCreated: true
responseIsCreated: true
responseIsCreated: true
responseIsCreated: true
responseIsCreated: true
it is ok !
通過CURL命令檢視基本結果,插入資料成功: