1. 程式人生 > >Elasticsearch java api 基本使用之增、刪、改、查

Elasticsearch java api 基本使用之增、刪、改、查

主要參考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命令檢視基本結果,插入資料成功: