ElasticSearch JAVA HighLevelClient

在 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();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值