本文转自SDK社区:sdk.cn

一、创立连贯
!ps:RestHighLevelClient是官网指定的连贯API。另外一个是TransportClient,然而TransportClient这个是曾经废除不必的,所以会在ES8.0之后齐全移除,也就是说8.0之后就无奈应用了
RestHighLevelClient的maven依赖为(应用前必须增加相应依赖)

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.9.2</version></dependency>    <dependency>        <groupId>org.elasticsearch</groupId>        <artifactId>elasticsearch</artifactId>        <version>7.9.2</version></dependency>

留神:以上的依赖版本能够依据你应用的ES的版本来定,向下兼容,然而无奈向上兼容

创立连贯

static String ip = "localhost";static int port = 9200;static RestHighLevelClient restHighLevelClient = null;static TransportClient client = null;static  RestHighLevelClient initClient(){    //这里的RestClient.builder(new HttpHost(ip,port),.........)反对多个httphost连贯,也就是反对连贯多个elasticsearch    restHighLevelClient = new RestHighLevelClient(RestClient.builder(new HttpHost(ip,port)));}static Connection getInstance(){    synchronized (ElasticSearchFactory.class){        if (restHighLevelClient == null){         restHighLevelClient  =   initClient();        }    }    return connection;}

RestHighLevelClient 反对对ES的增删改查、批量操作
新增:

    public static  void creatIndex(String json){    IndexRequest indexRequest = new IndexRequest("test_index","String");    indexRequest.source(json, XContentType.JSON);//这里的json为存入ES的文档内容    try {        restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);//RequestOptions在新办法中必须抉择    } catch (IOException e) {        e.printStackTrace();    }}

查问:
查问反对间接查问和条件查问,因为ES是依据索引、文档类型和文档ID确定一个惟一的文档的,所以间接查问必须要有索引和类型还有ID

public static Map<String, Object> getIndex(String indexName,String type,String id){    GetRequest request = new GetRequest(indexName);    //SearchRequest searchRequest = new SearchRequest(indexName);    try {        GetResponse search = restHighLevelClient.get(request, RequestOptions.DEFAULT);        Map<String, Object> source = search.getSource();        return source;    } catch (IOException e) {        e.printStackTrace();    }    return new HashMap<>();}

条件查问:
条件查问反对所有的ES的查问规定

public static Map<String, Object> searchIndex(String indexName){    //GetRequest request = new GetRequest(indexName);    //SearchRequest searchRequest = new SearchRequest(indexName);    QueryBuilder queryBuilders = QueryBuilders.boolQuery().filter(            QueryBuilders.termQuery("queryKey","吱吱吱ZZZ")    );    SearchRequest searchRequest = new SearchRequest();    //searchRequest.indices("posts");这里能够设计GEET或者POST    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();    // searchSourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC));反对按评分排序,评分是指分词之后获得的文档类似度评分    searchSourceBuilder.query(QueryBuilders.boolQuery().filter(QueryBuilders.termQuery("queryKey.keyword","吱吱吱ZZZ")));    searchRequest.source(searchSourceBuilder);    try {        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);        SearchHit[] hits = search.getHits().getHits();        for (SearchHit searchHit : hits){            Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();            System.out.println("source : {}" + sourceAsMap.toString());        }    } catch (IOException e) {        e.printStackTrace();    }    return new HashMap<>();}

批改:
ps:ES中其实并不存在真正意义上的批改,其实是进行的文档笼罩,先将原文档查出来标记删除,而后在原文档的根底上增加上批改造成一份新文档,存入ES中,之后再将打上删除标记的文档删除。

public static void updateIndex(String indexName, String type, String id, String json){    UpdateRequest request = new UpdateRequest(indexName, type, id);    request.doc(json, XContentType.JSON);    try {        UpdateResponse updateResponse = restHighLevelClient.update(request,RequestOptions.DEFAULT);    } catch (IOException e) {        e.printStackTrace();    }}

删除:

public static void deleteIndex(String indexName, String type, String id){    DeleteRequest request = new DeleteRequest(indexName,type,id);    try {        restHighLevelClient.delete(request,RequestOptions.DEFAULT);    } catch (IOException e) {        e.printStackTrace();    }}

bulk操作,bulk操作相当于批处理,可能在一次操作中解决一批数据,同时可能同时解决,增删改操作

  public static void bulkIndex(){        BulkRequest request = new BulkRequest();        String jsonString="{\n" +                "\t\"databaseId\": \"謝謝謝謝謝謝\",\n" +                "\t\"databaseType\": \"嘻嘻嘻\",\n" +                "\t\"queryKey\":\"吱吱吱ZZZ\"\n" +                "}\n";    UUID uuid = UUID.randomUUID();    request.add(new IndexRequest("test_index", "String", uuid.toString())                .source(jsonString,XContentType.JSON));        String updateJson="{\n" +                "  \"queryKey\":\"吱吱吱ZZZ\"\n" +                "}";        request.add(new UpdateRequest("test_index", "String", uuid.toString())                .doc(updateJson,XContentType.JSON));        request.add(new DeleteRequest("test_index", "String", uuid.toString()));    try {        restHighLevelClient.bulk(request, RequestOptions.DEFAULT);    } catch (IOException e) {        e.printStackTrace();    }}

执行ES-DSL

String json = "{\"bool\":{\"filter\":[{\"term\":{\"queryKey.keyword\":\"吱吱吱ZZZ\"}}]}}";String index= "test_index";public static void wapQuerty(String json,String index){    WrapperQueryBuilder queryBuilder = new WrapperQueryBuilder(json);    SearchRequest searchRequest = new SearchRequest();    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();    searchSourceBuilder.query(queryBuilder);    searchRequest.source(searchSourceBuilder).indices(index);    try {        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);        SearchHit[] hits = search.getHits().getHits();        for (SearchHit searchHit : hits){            Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();            String id = searchHit.getId();            System.out.println("id:"+id);        }    } catch (IOException e) {        e.printStackTrace();    }}