ElasticSearch High Level REST API【1】文檔基本操作


獲取ES客戶端

ES的提供了四種Java客戶端,分別為節點客戶端(node client)、傳輸客戶端(Transport Client)、低級REST客戶端、高級REST客戶端。

節點客戶端作為集群節點的一部分,在集群節點較多的情況下會影響集群的反應速度。

傳輸客戶端客戶端雖然實現了和集群的解耦,相對節點更“輕”,但是會在ES7.0或8.0之后被移除,被“高級Rest客戶端”所取代。

在此截取了ES官方文檔對此的說明。因此學習“高級RestAPI”的使用還是很有必要的。

如下為ES 客戶端的創建:

@Configuration
public class ElasticClient {
    private String host = "10.1.59.101";
    private int port = 9200;

    /**
     * 獲取Rest高級客戶端
     * @return
     */
    @Bean
    public RestHighLevelClient getRestHighLevelClient(){
        RestClientBuilder builder = RestClient.builder(new HttpHost(host, port));
        return new RestHighLevelClient(builder);
    }

    /**
     * 獲取Rest低級客戶端
     * @return
     */
    @Bean
    public RestClient getRestClient(){
        RestClient build = RestClient.builder(new HttpHost(host)).build();
        return build;
    }

下面介紹下ES在Java中基本的文檔增刪改查操作

索引操作

索引即我們的新增操作,ES提供了三種形式的索引,分別為通過Json字符串、Map集合、XContentBuilder實現索引操作

示例如下:

public void save(User user) {
        RestHighLevelClient client = elasticClient.getRestHighLevelClient();
        //Json字符串作為數據源
        IndexRequest indexRequest1 = new IndexRequest(
                "02",
                "book",
                "3");
        String jsonString = "{" +
                "\"name\":\"生命的誕生\"," +
                "\"type\":\"科學\"," +
                "\"price\":\"170\"" +
                "}";

        indexRequest1.source(jsonString, XContentType.JSON);
        //Map集合作為數據源
        Map jsonMap = new HashMap<>();
        jsonMap.put("user", "userByMap");
        jsonMap.put("postDate", new Date());
        jsonMap.put("message", "messageByMap");
        IndexRequest indexRequest2 = new IndexRequest("posts", "doc", "34")
                .source(jsonMap);
        //XContentBuilder作為數據源
        XContentBuilder builder = null;
        try {
            builder = XContentFactory.jsonBuilder();
            builder.startObject();
            builder.field("user", "userXXX");
            builder.timeField("postDate", new Date());
            builder.field("message", "messageXXX");
            builder.endObject();
        } catch (IOException e) {
            e.printStackTrace();
        }
        IndexRequest indexRequest3 = new IndexRequest("posts", "doc", "1")
                .source(builder);
        try {
            IndexResponse indexResponse1 = client.index(indexRequest1, RequestOptions.DEFAULT);
            client.index(indexRequest2, RequestOptions.DEFAULT);
            client.index(indexRequest3, RequestOptions.DEFAULT);
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

查詢

根據索引、類型、ID 查詢文檔,示例如下

public void get(){
        RestHighLevelClient client = elasticClient.getRestHighLevelClient();
        GetRequest getRequest = new GetRequest(
                "posts",
                "doc",
                "1");
        try {
            GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

刪除

public void delete(){
        RestHighLevelClient client = elasticClient.getRestHighLevelClient();
        DeleteRequest deleteRequest = new DeleteRequest("02", "book", "2");
        deleteRequest.timeout(TimeValue.timeValueMinutes(10));
        deleteRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL);
        try {
            client.delete(deleteRequest, RequestOptions.DEFAULT);
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

更新

public void update(User user){
        RestHighLevelClient client = elasticClient.getRestHighLevelClient();
        UpdateRequest updateRequest = new UpdateRequest("posts", "doc", "35");
        Map map = new HashMap<>();
        map.put("message", "message_update");
        map.put("user", "user_update");
        updateRequest.doc(user.toJsonString(), XContentType.JSON);
        try {
            client.update(updateRequest, RequestOptions.DEFAULT);
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

查詢文檔是否存在

public void exists() {
        RestHighLevelClient client = elasticClient.getRestHighLevelClient();
        GetRequest getRequest = new GetRequest("posts","doc","33");
        GetResponse getResponse = null;
        try {
            getRequest.fetchSourceContext(new FetchSourceContext(false));//禁用獲取 _source字段
            getRequest.storedFields("_none_");//禁用獲取存儲字段。
            boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
            client.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

Bulk批量操作

bulk可以批量執行多條操作語句,bulk支持批量操作不同的命令,例如批量更新和刪除

public void bulk(User user){
        RestHighLevelClient client = elasticClient.getRestHighLevelClient();
        User user2 = new User();
        user2.setName("周大福");
        user2.setAge(211);
        user2.setPosition("珠寶");
        BulkRequest bulkRequest = new BulkRequest();
        IndexRequest indexRequest1 = new IndexRequest("posts", "doc", "41").source(user.toJsonString(), XContentType.JSON);
        IndexRequest indexRequest2 = new IndexRequest("posts", "doc", "42").source(user2.toJsonString(), XContentType.JSON);
        DeleteRequest deleteRequest = new DeleteRequest("01", "law", "3");
        bulkRequest.add(indexRequest1);
        bulkRequest.add(indexRequest2);
        bulkRequest.add(deleteRequest);
        try {
            client.bulk(bulkRequest, RequestOptions.DEFAULT);
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM