Java操作Elasticsearch

Java操作Elasticsearch


今天呢,發一篇JAVA操作ES搜索引擎的代碼吧!


創建工程就不說了

Maven工程:加入Maven依賴!!!

pom.xml

	<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch</groupId>
			<artifactId>elasticsearch</artifactId>
			<version>1.4.4</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.1.3</version>
		</dependency>

JUnit測試首先連接:

	/**
	 * Title: testConnection
	 * Description: 測試連接
	 */
	TransportClient client = null;
	@Before
	public void connection(){
		//設置一些屬性
		//Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name","elasticsearch").build();
		// 獲取一個客戶端對象
		client = new TransportClient();//new TransportClient(settings);
		//	指定連接的Es節點Ip和端口 端口默認使用 9300
		TransportAddress transportAddress = new InetSocketTransportAddress("cloudera",9300);
		client.addTransportAddress(transportAddress);
		//	獲取客戶端 連接上的節點信息
		ImmutableList<DiscoveryNode> nodes = client.connectedNodes();
		for (DiscoveryNode discoveryNode : nodes) {
			System.out.println(discoveryNode.getHostAddress()+"\t"+discoveryNode.getHostName());
		}
		
	}
上面用到的核心類:TransportClient


定義兩個常量 方便之後的操作:

private final static String INDEX = "test";
private final static String TYPE = "emp";
	

上面是索引庫的位置 和 類型

  

創建索引:有4種方法 下面給出代碼

	
	/**
	 * 
	 * Title: creatIndex1
	 * Description:創建索引___JSON
	 */
	@Test
	public void creatIndex1() {
		String jsonstr = "{\"name\":\"Baby\",\"address\":\"jx\",\"age\":23}";
		
		IndexResponse response = client.prepareIndex(INDEX, TYPE, "3")//
				.setSource(jsonstr).execute()//
				.actionGet();
		
		System.out.println(response.getId());
	}
	
	
	/**
	 * 
	 * Title: creatIndex2
	 * Description:創建索引___Map
	 */
	@Test
	public void creatIndex2() {
		Map<String, Object> source = new HashMap<String, Object>();
		source.put("name", "ww");
		source.put("age", 20);
		source.put("address", "SH");
		
		
		IndexResponse response = client.prepareIndex(INDEX, TYPE)//
				.setSource(source).execute()//
				.actionGet();
		System.out.println(response.getId());
	}
	
	
	/**
	 * 
	 * Title: creatIndex3
	 * Description:創建索引___Bean-->工具類轉JSON
	 * @throws JsonProcessingException 
	 */
	@Test
	public void creatIndex3() throws Exception {
		
		Person person = new Person();
		person.setName("JSQ");
		person.setAge(21);
		person.setAddress("JL");
		
		ObjectMapper mapper = new ObjectMapper();
		
		IndexResponse response = client.prepareIndex(INDEX, TYPE)//
				.setSource(mapper.writeValueAsString(person)).execute()//
				.actionGet();
		System.out.println(response.getId());
	}
	
	/**
	 * 
	 * Title: creatIndex4 
	 * Description:創建索引___工具類 XContentBuilder
	 * @throws JsonProcessingException 
	 */
	@Test
	public void creatIndex4() throws Exception {
		
		XContentBuilder builder = XContentFactory.jsonBuilder()//
				.startObject()//  {
				.field("name", "test")// "name":"test"
				.field("age", 31)//
				.endObject();//  }
		
		IndexResponse response = client.prepareIndex(INDEX, TYPE)//
				.setSource(builder).execute()//
				.actionGet();
		System.out.println(response.getId());
	}

根據ID讀取索引

/**
	 * 
	 * Title: getIndex
	 * Description:查詢
	 */
	@Test
	public void getIndexByID(){
     GetResponse get = client.prepareGet(INDEX, TYPE, "1").execute().actionGet();
     
     System.out.println(get.getSourceAsString());
		
	}


更新操作:

/**
	 * 
	 * Title: getIndex
	 * Description:更新1
	 * @throws IOException 
	 */
	@Test
	public void Update() throws Exception {
		XContentBuilder builder = XContentFactory.jsonBuilder()//
				.startObject()//  {
				.field("name", "qwer")// "name":"test"
				.field("age", 16)//
				.endObject();//  }
		
		
		UpdateResponse response = client.prepareUpdate(INDEX, TYPE, "AVZ_sjFPSKhvuiHi4K8Z").setDoc(builder).execute().actionGet();

		System.out.println(response.getVersion());
		
	}
	
	/**
	 * 
	 * Title: getIndex 
	 * Description:更新2
	 * 
	 * @throws Exception
	 */
	@Test
	public void Update2() throws Exception {
		UpdateRequest request = new UpdateRequest(INDEX, TYPE, "AVZ_sjG3SKhvuiHi4K8a");
		request.doc(XContentFactory.jsonBuilder().startObject().field("age", 18).endObject());
		UpdateResponse response = client.update(request).get();
		System.out.println(response.getVersion());
	}
	
	/**
	 * 
	 * Title: UpdateOrCreate
	 * Description: 更新或者插入
	 * @throws Exception
	 */
	@Test
	public void UpdateOrCreate() throws Exception {
	UpdateRequest request = new UpdateRequest(INDEX, TYPE, "4");
	XContentBuilder builder = XContentFactory.jsonBuilder()//
			.startObject()//  {
			.field("name", "adfg")// "name":"test"
			.field("age", 66)//
			.endObject();//  }
	
	request.doc(builder);
	
	request.upsert(builder);
	
	UpdateResponse response = client.update(request).get();
	System.out.println(response.getVersion());
	}
	


刪除操作

/**
	 * 
	 * Title: UpdateOrCreate
	 * Description: 刪除1
	 * @throws Exception
	 */
	@Test
	public void delete() throws Exception {
		DeleteRequest request = new DeleteRequest(INDEX, TYPE, "AVZ9SoaeqXbhzyjETmWC");
		
		DeleteResponse response = client.delete(request ).get();
		
		System.out.println("版本:"+response.getVersion());
	}
	
	
	
	/**
	 * 
	 * Title: UpdateOrCreate
	 * Description: 刪除2
	 * @throws Exception
	 */
	@Test
	public void delete2() throws Exception {
		DeleteResponse response = client.prepareDelete(INDEX, TYPE, "1").execute().actionGet();
		
		System.out.println("版本:"+response.getVersion());
	}


求索引總數:

	/**
	 * 
	 * Title: QueryCount
	 * Description: 求總數
	 * @throws Exception
	 */
	@Test
	public void QueryCount() throws Exception {
		long l = client.prepareCount(INDEX).execute().get().getCount();
		System.out.println("總數:"+l);
	}

批量操作:

	
	/**
	 * 
	 * Title: testBulk
	 * Description:批量操作
	 */
	@Test
	public void testBulk(){
		BulkRequestBuilder bulk = client.prepareBulk();
		
		//創建索引
		IndexRequest request1 = new IndexRequest(INDEX, TYPE, "101");
		request1.source("{\"name\":\"test101\",\"age\":101}");
		IndexRequest request2 = new IndexRequest(INDEX, TYPE, "102");
		request2.source("{\"name\":\"test102\",\"age\":102}");
		
		//刪除索引
		DeleteRequest request3 = new DeleteRequest(INDEX, TYPE, "2");
		
		bulk.add(request1);
		bulk.add(request2);
		bulk.add(request3);
		
		BulkResponse response = bulk.execute().actionGet();
		
		if(response.hasFailures()){
			System.out.println("發生錯誤");
		}else{
			System.out.println("全部執行成功");
		}
	}



代碼也比較簡單 很好理解!!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章