RestHighLevelClient

一、創(chuàng)建連接
!ps:RestHighLevelClient是官方指定的連接API。另外一個是TransportClient,但是TransportClient這個是已經(jīng)廢棄不用的,所以會在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>

注意:以上的依賴版本可以根據(jù)你使用的ES的版本來定,向下兼容,但是無法向上兼容

創(chuàng)建連接

    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的文檔內(nèi)容
        try {
            restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);//RequestOptions在新方法中必須選擇
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

查詢:
查詢支持直接查詢和條件查詢,由于ES是根據(jù)索引、文檔類型和文檔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的查詢規(guī)則:![使用ES查詢語句須知]{http://m.itdecent.cn/p/cfbac15e0b7a}
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");這里可以設(shè)計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中其實并不存在真正意義上的修改,其實是進行的文檔覆蓋,先將原文檔查出來標記刪除,然后在原文檔的基礎(chǔ)上添加上修改形成一份新文檔,存入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操作相當于批處理,能夠在一次操作中處理一批數(shù)據(jù),同時能夠同時處理,增刪改操作
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();
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容