ElasticSearch进阶(一)ElasticSearch的Java客户端

前言

      本章讲解ElasticSearch的Java客户端的使用

方法

1.概念

在ES中,提供了多种语言客户端的操控!那么Java我们推荐使用Java REST Client

后期与spring或者springboot整合的时候我们将会使用更加牛x的API哦!

ElasticSearch进阶(一)ElasticSearch的Java客户端_第1张图片

而Java REST Client又分为两种,我们重点讲解Java High Level REST Client(Java高级的REST客户端)

ElasticSearch进阶(一)ElasticSearch的Java客户端_第2张图片

本次将通过翻阅文档的方式来带大家熟悉这款API.

2.Java High Level REST Client的环境搭建

首先我们确定ES中有一些测试数据,如:

ElasticSearch进阶(一)ElasticSearch的Java客户端_第3张图片

Java高级REST客户端的API地址:https://artifacts.elastic.co/javadoc/org/elasticsearch/client/elasticsearch-rest-high-level-client/7.4.0/index.html.

1)创建maven项目

我直接拿我之前的maven项目做了一个copy,大家可以选择自行创建。

ElasticSearch进阶(一)ElasticSearch的Java客户端_第4张图片

2)修改pom文件

最主要的添加如下的配置引入ES高级客户端的依赖:


    org.elasticsearch.client
    elasticsearch-rest-high-level-client
    7.4.0

本次完整的pom文件如下,Y因为是我以前的项目,有些配置可能用不到,请大家自行考究。


	4.0.0
	cn.edu.ccut
	java-elasticsearch
	0.0.1-SNAPSHOT
	war

	
		
		1.8
		
		5.1.9.RELEASE
		
		5.4.4.Final
		
		7.4.0
	
	
	
		
		
		    org.elasticsearch.client
		    elasticsearch-rest-high-level-client
		    ${es.version}
		
		
		
			org.springframework
  			spring-webmvc
  			${spring.version}
		
		
		
			org.hibernate
			hibernate-core
			${hibernate.version}
    	
		
		
			org.hibernate
			hibernate-entitymanager
			${hibernate.version}
		
		
		
			org.springframework
  			spring-orm
  			${spring.version}
		
		
		
		    com.alibaba
		    druid
		    1.1.20
		
		
		
		    mysql
		    mysql-connector-java
		    5.1.47
		
		
		
		    org.springframework
		    spring-test
		    ${spring.version}
		    test
		
		
		
		    junit
		    junit
		    4.12
		    test
		
	

2.常用的操作

首先编写测试文件:

package cn.edu.ccut.test;

import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.http.HttpHost;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class PersonTest {
	
	private RestHighLevelClient client;
	
	@Before
	public void init(){
		this.client = new RestHighLevelClient(
		        RestClient.builder(
		                new HttpHost("localhost", 9200, "http")));
	}
	
	@After
	public void finish() throws Exception{
		this.client.close();
	}
}

1)添加文档

编写添加文档的方法如下:

@Test
public void testCreateDoc() throws Exception{
	Map jsonMap = new HashMap<>();
	jsonMap.put("id", "1005");
	jsonMap.put("name", "陈立志");
	jsonMap.put("age", 23);
	jsonMap.put("email", "[email protected]");
	jsonMap.put("hobby", "跳舞、踢足球、下围棋");
	IndexRequest indexRequest = new IndexRequest("jwang01")
	    .id("1005").source(jsonMap);
	IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
	System.out.println("id->"+indexResponse.getId());
	System.out.println("index->"+indexResponse.getIndex());
	System.out.println("version->"+indexResponse.getVersion());
}

执行后观察数据结果如下:

ElasticSearch进阶(一)ElasticSearch的Java客户端_第5张图片

2)根据id查询文档

@Test
public void testSearchDoc01() throws Exception{
	GetRequest getRequest = new GetRequest("jwang01", "1001");
	GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
	if (getResponse.isExists()) {
	    long version = getResponse.getVersion();
	    String sourceAsString = getResponse.getSourceAsString();        
	    Map sourceAsMap = getResponse.getSourceAsMap(); 
	    byte[] sourceAsBytes = getResponse.getSourceAsBytes();
	    System.out.println("version->"+version);
	    System.out.println("sourceAsString->"+sourceAsString);
	    System.out.println("sourceAsMap->"+sourceAsMap);
	    System.out.println("sourceAsBytes->"+sourceAsBytes);
	}
}

执行结果如下所示:

ElasticSearch进阶(一)ElasticSearch的Java客户端_第6张图片

3)根据id删除文档

@Test
public void testDeleteDoc() throws Exception{
	DeleteRequest request = new DeleteRequest("jwang01","1005");
	DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT);
	System.out.println("id->"+deleteResponse.getId());
	System.out.println("index->"+deleteResponse.getIndex());
	System.out.println("version->"+deleteResponse.getVersion());
}

执行完毕后观察数据:

ElasticSearch进阶(一)ElasticSearch的Java客户端_第7张图片

4)根据id更新文档

@Test
public void testUpdateDoc() throws Exception{
	Map jsonMap = new HashMap<>();
	jsonMap.put("name", "张三三");
	UpdateRequest request = new UpdateRequest("jwang01", "1001").doc(jsonMap);
	UpdateResponse updateResponse = client.update(request, RequestOptions.DEFAULT);
	System.out.println("id->"+updateResponse.getId());
	System.out.println("index->"+updateResponse.getIndex());
	System.out.println("version->"+updateResponse.getVersion());
}

执行后观察数据:

ElasticSearch进阶(一)ElasticSearch的Java客户端_第8张图片

5)查询指定index的所有数据

@Test
public void testSearchDoc02() throws Exception{
	SearchRequest searchRequest = new SearchRequest("jwang01"); 
	SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
	searchSourceBuilder.query(QueryBuilders.matchAllQuery()); 
	searchRequest.source(searchSourceBuilder);
	SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
	SearchHits hits = searchResponse.getHits();
	SearchHit[] searchHits = hits.getHits();
	for (SearchHit hit : searchHits) {
		String sourceAsString = hit.getSourceAsString();
		Map sourceAsMap = hit.getSourceAsMap();
		System.out.println("sourceAsString->"+sourceAsString);
		System.out.println("sourceAsMap->"+sourceAsMap);
	}
}

查询的结果如下:

ElasticSearch进阶(一)ElasticSearch的Java客户端_第9张图片

6)查询爱好中包含篮球的数据

@Test
public void testSearchDoc03() throws Exception{
	SearchRequest searchRequest = new SearchRequest("jwang01"); 
	SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
	searchSourceBuilder.query(QueryBuilders.matchQuery("hobby", "篮球")); 
	searchSourceBuilder.from(0); 
	searchSourceBuilder.size(5); 
	searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
	searchRequest.source(searchSourceBuilder);
	SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
	SearchHits hits = searchResponse.getHits();
	SearchHit[] searchHits = hits.getHits();
	for (SearchHit hit : searchHits) {
		String sourceAsString = hit.getSourceAsString();
		Map sourceAsMap = hit.getSourceAsMap();
		System.out.println("sourceAsString->"+sourceAsString);
		System.out.println("sourceAsMap->"+sourceAsMap);
	}
}

查询结果如下所示:

7)查询爱好中包含篮球的数据,并高亮显示

@Test
public void testSearchDoc04() throws Exception{
	SearchRequest searchRequest = new SearchRequest("jwang01"); 
	SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
	searchSourceBuilder.query(QueryBuilders.matchQuery("hobby", "篮球")); 
	searchSourceBuilder.from(0); 
	searchSourceBuilder.size(5); 
	searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
	
	HighlightBuilder highlightBuilder = new HighlightBuilder(); 
	HighlightBuilder.Field highlightHobby =new HighlightBuilder.Field("hobby"); 
	highlightHobby.highlighterType("unified");  
	highlightBuilder.field(highlightHobby);  
	searchSourceBuilder.highlighter(highlightBuilder);
	
	searchRequest.source(searchSourceBuilder);
	SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
	SearchHits hits = searchResponse.getHits();
	SearchHit[] searchHits = hits.getHits();
	for (SearchHit hit : searchHits) {
		Map highlightFields = hit.getHighlightFields();
		String sourceAsString = hit.getSourceAsString();
		Map sourceAsMap = hit.getSourceAsMap();
		System.out.println("sourceAsString->"+sourceAsString);
		System.out.println("sourceAsMap->"+sourceAsMap);
		System.out.println("highlightFields->"+highlightFields);
	}
}

查询的结果如下所示:

ElasticSearch进阶(一)ElasticSearch的Java客户端_第10张图片

你可能感兴趣的:(ElasticSearch,ElasticSearch)