在 pom.xml 中加入 Elasticsearch 的依赖:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.2.0</version>
</dependency>
<!--程序启动时报一下错误需要添加httpclient的依赖-->
<!--java.lang.ClassNotFoundException: org.apache.http.client.config.RequestConfig-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.8</version>
</dependency>
client
分为免密直接连接和需要用户名和密码两种连接方式
package elasticSearch.highLevelClient;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import java.io.IOException;
/**
* @author [tu.tengfei]
* @description
* @date 2019/8/10
*/
public class ESHighClient {
public static RestHighLevelClient client;
public static void getESClient(){
// client = new RestHighLevelClient(RestClient.builder(
// new HttpHost("slave01", 9200, "http"),
// new HttpHost("master01", 9200, "http")
// ));
//需要用户名和密码的认证
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "passwd"));
RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost("192.168.108.126", 9200, "http"))
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {
return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
});
client = new RestHighLevelClient(restClientBuilder);
}
public static void clientClose(){
if (client!=null){
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
High Index API
package elasticSearch.highLevelClient;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.get.*;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.tasks.TaskSubmissionResponse;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.index.reindex.BulkByScrollResponse;
import org.elasticsearch.index.reindex.DeleteByQueryRequest;
import org.elasticsearch.index.reindex.ReindexRequest;
import org.elasticsearch.index.reindex.UpdateByQueryRequest;
import org.elasticsearch.script.Script;
import org.elasticsearch.script.ScriptType;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
/**
* @author [tu.tengfei]
* @description
* @date 2019/8/10
*/
public class HighIndexAPI {
public static void main(String[] args) {
ESHighClient.getESClient();
RestHighLevelClient client = ESHighClient.client;
// updateIndex(client);
// getRequest(client);
// existsAPI(client);
// updateAPI(client);
// bulkAPI(client);
// multiGetAPI(client);
// reindexAPI(client);
// updateByQuery(client);
deleteByQuery(client);
ESHighClient.clientClose();
}
public static void submitIndex(RestHighLevelClient client) {
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("name", "汪峰");
hashMap.put("address", "重庆市渝北区财富中心");
hashMap.put("send_time", "2019-08-07");
hashMap.put("num", "sf112011482");
IndexRequest express_info_v1 = new IndexRequest("express_info_v1").id("3").source(hashMap);
try {
IndexResponse indexResponse = client.index(express_info_v1, RequestOptions.DEFAULT);
System.out.println(indexResponse);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void getRequest(RestHighLevelClient client) {
GetRequest getRequest = new GetRequest("express_info_v1", "2");
try {
GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT);
System.out.println(documentFields);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void existsAPI(RestHighLevelClient client) {
GetRequest getRequest = new GetRequest("express_info_v1", "3");
//不查询_source
getRequest.fetchSourceContext(new FetchSourceContext(false));
//不存储字段
getRequest.storedFields("__none__");
try {
boolean documentFields = client.exists(getRequest, RequestOptions.DEFAULT);
System.out.println(documentFields);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void updateAPI(RestHighLevelClient client) {
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("name", "汪大峰");
hashMap.put("send_time", "2019-08-11");
UpdateRequest updateRequest = new UpdateRequest("express_info_v1", "3").doc(hashMap);
try {
UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(update);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void bulkAPI(RestHighLevelClient client) {
String index = "express_info_v1";
BulkRequest bulkRequest = new BulkRequest();
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("name", "张三");
hashMap.put("address", "重庆市渝北区金开大道");
hashMap.put("send_time", "2019-08-09");
hashMap.put("num", "sf112011485");
HashMap<String, Object> hashMap2 = new HashMap<>();
hashMap2.put("name", "李四");
hashMap2.put("address", "重庆市渝北区鸳鸯街道");
hashMap2.put("send_time", "2019-07-09");
hashMap2.put("num", "sf1120111111");
bulkRequest.add(new IndexRequest(index).id("4").source(hashMap));
bulkRequest.add(new IndexRequest(index).id("5").source(hashMap2));
try {
BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulkResponse);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void multiGetAPI(RestHighLevelClient client) {
MultiGetRequest request = new MultiGetRequest();
request.add(new MultiGetRequest.Item("express_info_v1", "1"));
request.add(new MultiGetRequest.Item("express_info_v1", "2"));
try {
MultiGetResponse response = client.mget(request, RequestOptions.DEFAULT);
MultiGetItemResponse[] responses = response.getResponses();
// System.out.println(responses);
for (int i = 0; i < responses.length; i++) {
GetResponse response1 = responses[i].getResponse();
System.out.println(response1);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void reindexAPI(RestHighLevelClient client) {
ReindexRequest reindexRequest = new ReindexRequest();
reindexRequest.setSourceIndices("express_info_v1");
reindexRequest.setDestIndex("express_info_v5");
reindexRequest.setRefresh(true);
try {
TaskSubmissionResponse taskSubmissionResponse = client.submitReindexTask(reindexRequest, RequestOptions.DEFAULT);
System.out.println(taskSubmissionResponse);
System.out.println(taskSubmissionResponse.getTask());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void updateByQuery(RestHighLevelClient client) {
UpdateByQueryRequest request = new UpdateByQueryRequest("express_info_v1");
request.setQuery(new TermQueryBuilder("name", "李四"));
// request.setQuery(new MatchQueryBuilder("fieldName","value"));
request.setScript(new Script(ScriptType.INLINE, "painless", "ctx._source.send_time = '2019-08-12'", Collections.emptyMap()));
try {
BulkByScrollResponse bulkByScrollResponse = client.updateByQuery(request, RequestOptions.DEFAULT);
System.out.println(bulkByScrollResponse);
System.out.println(bulkByScrollResponse.getStatus());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void deleteByQuery(RestHighLevelClient client) {
DeleteByQueryRequest request = new DeleteByQueryRequest("express_info_v1");
request.setQuery(new TermQueryBuilder("name", "李四"));
try {
BulkByScrollResponse bulkByScrollResponse = client.deleteByQuery(request, RequestOptions.DEFAULT);
System.out.println(bulkByScrollResponse);
System.out.println(bulkByScrollResponse.getStatus());
} catch (IOException e) {
e.printStackTrace();
}
}
}
High Search API
package elasticSearch.highLevelClient;
import org.elasticsearch.action.search.*;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.script.ScriptType;
import org.elasticsearch.script.mustache.MultiSearchTemplateRequest;
import org.elasticsearch.script.mustache.MultiSearchTemplateResponse;
import org.elasticsearch.script.mustache.SearchTemplateRequest;
import org.elasticsearch.script.mustache.SearchTemplateResponse;
import org.elasticsearch.search.Scroll;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.suggest.SuggestBuilder;
import org.elasticsearch.search.suggest.SuggestBuilders;
import org.elasticsearch.search.suggest.completion.CompletionSuggestionBuilder;
import java.io.IOException;
import java.util.HashMap;
/**
* @author [tu.tengfei]
* @description
* @date 2019/8/12
*/
public class HighSearchAPI {
public static void main(String[] args) {
ESHighClient.getESClient();
RestHighLevelClient client = ESHighClient.client;
// basicSearchAPI(client);
// suggestionSearchAPI(client);
// scrollSearchAPI(client);
// multiSearch(client);
// searchTemplate(client);
multiSearchTemplate(client);
ESHighClient.clientClose();
}
public static void basicSearchAPI(RestHighLevelClient client){
SearchRequest searchRequest = new SearchRequest("express_info_v1");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.termQuery("name","张三"));
searchSourceBuilder.from(0);
searchSourceBuilder.size(5);
searchRequest.source(searchSourceBuilder);
try {
SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(search);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void suggestionSearchAPI(RestHighLevelClient client){
SearchRequest searchRequest = new SearchRequest("pinyin_suggester");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
CompletionSuggestionBuilder termSuggestionBuilder = SuggestBuilders.completionSuggestion("keyword.keyword_first_py").text("cxk");
SuggestBuilder suggestBuilder = new SuggestBuilder();
suggestBuilder.addSuggestion("suggest_keyword",termSuggestionBuilder);
searchSourceBuilder.suggest(suggestBuilder);
searchRequest.source(searchSourceBuilder);
try {
SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(search);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void scrollSearchAPI(RestHighLevelClient client){
Scroll scroll = new Scroll(TimeValue.timeValueMinutes(1L));
SearchRequest searchRequest = new SearchRequest("express_info_v5");
searchRequest.scroll(scroll);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchQuery("address","江西省"));
searchRequest.source(searchSourceBuilder);
try {
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
String scrollId = searchResponse.getScrollId();
SearchHit[] hits = searchResponse.getHits().getHits();
while (hits!=null && hits.length>0){
SearchScrollRequest searchScrollRequest = new SearchScrollRequest(scrollId);
searchScrollRequest.scroll(scroll);
searchResponse = client.scroll(searchScrollRequest, RequestOptions.DEFAULT);
scrollId = searchResponse.getScrollId();
hits = searchResponse.getHits().getHits();
}
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
clearScrollRequest.addScrollId(scrollId);
ClearScrollResponse clearScrollResponse = client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
boolean succeeded = clearScrollResponse.isSucceeded();
System.out.println(succeeded);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void multiSearch(RestHighLevelClient client){
MultiSearchRequest multiSearchRequest = new MultiSearchRequest();
SearchRequest searchRequest = new SearchRequest("express_info_v5");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchQuery("address","江西省"));
searchRequest.source(searchSourceBuilder);
SearchRequest searchRequest1 = new SearchRequest("express_info_v2");
searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchQuery("address","康庄美地"));
searchRequest1.source(searchSourceBuilder);
multiSearchRequest.add(searchRequest);
multiSearchRequest.add(searchRequest1);
try {
MultiSearchResponse msearch = client.msearch(multiSearchRequest, RequestOptions.DEFAULT);
System.out.println(msearch);
MultiSearchResponse.Item[] responses = msearch.getResponses();
for (int i =0;i<responses.length;i++){
System.out.println(responses);
System.out.println(responses[i].getResponse());
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void searchTemplate(RestHighLevelClient client){
SearchTemplateRequest searchTemplateRequest = new SearchTemplateRequest();
searchTemplateRequest.setRequest(new SearchRequest("express_info_v5"));
searchTemplateRequest.setScriptType(ScriptType.INLINE);
searchTemplateRequest.setScript(
"{" +
" \"query\":{" +
" \"match\":{" +
" \"{{field}}\":\"{{value}}\"" +
" }" +
" }," +
" \"size\":\"{{size}}\"" +
"}");
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("field","address");
hashMap.put("value","江西省");
hashMap.put("size",5);
searchTemplateRequest.setScriptParams(hashMap);
try {
SearchTemplateResponse searchTemplateResponse = client.searchTemplate(searchTemplateRequest, RequestOptions.DEFAULT);
SearchResponse response = searchTemplateResponse.getResponse();
System.out.println(response);
System.out.println(response.getHits());
System.out.println(searchTemplateResponse.getSource());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void multiSearchTemplate(RestHighLevelClient client){
String[] searchTerms = {"康庄美地","江西省"};
MultiSearchTemplateRequest multiSearchTemplateRequest = new MultiSearchTemplateRequest();
for (String searchTerm:searchTerms){
SearchTemplateRequest searchTemplateRequest = new SearchTemplateRequest();
searchTemplateRequest.setRequest(new SearchRequest("express_info_v5"));
searchTemplateRequest.setScriptType(ScriptType.INLINE);
searchTemplateRequest.setScript(
"{" +
"\"query\":{" +
" \"match\":{" +
" \"{{field}}\":\"{{value}}\"" +
" }" +
" }," +
"\"size\":\"{{size}}\"" +
"}"
);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("field","address");
hashMap.put("value",searchTerm);
hashMap.put("size",5);
searchTemplateRequest.setScriptParams(hashMap);
multiSearchTemplateRequest.add(searchTemplateRequest);
}
try {
MultiSearchTemplateResponse multiSearchTemplateResponse = client.msearchTemplate(multiSearchTemplateRequest, RequestOptions.DEFAULT);
for (MultiSearchTemplateResponse.Item item:multiSearchTemplateResponse.getResponses()){
if (item.isFailure()){
System.out.println(item.getFailureMessage());
}else {
SearchTemplateResponse response = item.getResponse();
SearchResponse searchResponse = response.getResponse();
System.out.println(searchResponse);
System.out.println(searchResponse.getHits());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
High Indices API
package elasticSearch.highLevelClient;
import org.elasticsearch.action.admin.indices.analyze.AnalyzeRequest;
import org.elasticsearch.action.admin.indices.analyze.AnalyzeResponse;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentType;
import java.io.IOException;
/**
* @author [tu.tengfei]
* @description
* @date 2019/8/12
*/
public class HighIndicesAPI {
public static void main(String[] args) {
ESHighClient.getESClient();
RestHighLevelClient client = ESHighClient.client;
// analyzeAPI(client);
createIndex(client);
ESHighClient.clientClose();
}
public static void analyzeAPI(RestHighLevelClient client){
AnalyzeRequest analyzeRequest = new AnalyzeRequest();
analyzeRequest.text("爱我中华人民共和国");
analyzeRequest.analyzer("ik_smart");
// analyzeRequest.index("");
try {
AnalyzeResponse analyze = client.indices().analyze(analyzeRequest, RequestOptions.DEFAULT);
System.out.println(analyze);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void createIndex(RestHighLevelClient client){
CreateIndexRequest createIndexRequest = new CreateIndexRequest("express_info_v6");
createIndexRequest.settings(Settings.builder()
.put("index.number_of_shards",3)
.put("index.number_of_replicas",2));
createIndexRequest.mapping(
"{\n" +
" \"properties\":{\n" +
" \"name\":{\n" +
" \"type\":\"text\",\n" +
" \"fields\": {\n" +
" \"suggest_key\":{\n" +
" \"type\":\"completion\",\n" +
" \"analyzer\":\"key_pinyin\"\n" +
" },\n" +
" \"suggest_full\":{\n" +
" \"type\":\"completion\",\n" +
" \"analyzer\":\"full_pinyin\"\n" +
" }\n" +
" }\n" +
" },\n" +
" \"address\":{\n" +
" \"type\":\"text\",\n" +
" \"fields\": {\n" +
" \"suggest_key\":{\n" +
" \"type\":\"completion\",\n" +
" \"analyzer\":\"key_pinyin\"\n" +
" },\n" +
" \"suggest_full\":{\n" +
" \"type\":\"completion\",\n" +
" \"analyzer\":\"full_pinyin\"\n" +
" }\n" +
" }\n" +
" },\n" +
" \"send_time\":{\n" +
" \"type\":\"date\",\n" +
" \"format\": \"yyyy-MM-dd\"\n" +
" },\n" +
" \"num\":{\n" +
" \"type\":\"text\",\n" +
" \"analyzer\": \"key_pinyin\"\n" +
" }\n" +
" }\n" +
"}", XContentType.JSON
);
try {
CreateIndexResponse createIndexResponse = client.indices().create(createIndexRequest, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
} catch (IOException e) {
e.printStackTrace();
}
}
}