天天看點

elasticsearch實作增删改查操作restClient.performRequest

1、pom檔案新增依賴

<dependency>
			<groupId>org.elasticsearch.client</groupId>
			<artifactId>elasticsearch-rest-client</artifactId>
			<version>6.3.1</version>
		</dependency>

		<!--阿裡 FastJson依賴-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.39</version>
		</dependency>
           

2、編寫代碼

import com.alibaba.fastjson.JSONObject;
import com.example.demo.model.novel;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.entity.ContentType;
import org.apache.http.nio.entity.NStringEntity;
import org.apache.http.util.EntityUtils;
import org.elasticsearch.client.Response;
import org.elasticsearch.client.RestClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.util.Collections;
import java.util.Date;

/**
 * Created by Administrator on 2019/4/21.
 */
@RestController
public class HelloController {

    RestClient restClient = RestClient.builder(
            new HttpHost("localhost", 9200, "http")).build();

    /**
     * 檢視api資訊
     *
     * @throws Exception
     */
    @GetMapping("/bookApi")
    public void bookApi() throws Exception {
        String method = "GET";
        String endpoint = "/book";
        Response response = restClient.performRequest(method, endpoint);
        System.out.println(EntityUtils.toString(response.getEntity()));
    }

    /**
     * 新增索引
     *
     * @throws IOException
     */
    @GetMapping("/addIndex")
    public void addIndex() throws IOException {
        String method = "PUT";
        String endpoint = "/book";
        Response response = restClient.performRequest(method, endpoint);
        System.out.println(EntityUtils.toString(response.getEntity()));
    }

    /**
     * 新增文檔
     *
     * @throws Exception
     */
    @GetMapping("/createDocument")
    public void createDocument() throws Exception {
        String method = "PUT";
        String endpoint = "/book/novel/1"; // 索引:圖書【DB】  類型:小說【table】 文檔:【表裡的資料】
        novel testNovel = new novel();
        testNovel.setName("三國演義");
        testNovel.setWriter("張飛");
        testNovel.setCount(10);
        testNovel.setPublishDate(new Date());
        String jsonStr = JSONObject.toJSONString(testNovel);
        // JSON格式字元串
        HttpEntity entity = new NStringEntity(jsonStr, ContentType.APPLICATION_JSON);
        Response response = restClient.performRequest(method, endpoint, Collections.emptyMap(), entity);
        System.out.println(EntityUtils.toString(response.getEntity()));
        System.out.println("新增文檔結束!!!");
        // 傳回結果:
        // {"_index":"book","_type":"novel","_id":"1","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}
    }

    /**
     * 查詢文檔
     *
     * @throws Exception
     */
    @GetMapping("/queryDocument")
    public void queryDocument() throws Exception {
        String method = "GET";
        String endpoint = "/book/novel/1";
        Response response = restClient.performRequest(method, endpoint);
        System.out.println(EntityUtils.toString(response.getEntity()));
        System.out.println("查詢文檔結束!!!");
        // 傳回結果:
        // {"_index":"book","_type":"novel","_id":"1","_version":1,"found":true,"_source":{"count":10,"name":"三國演義","publishDate":1555825698934,"writer":"張飛"}}

    }

    /**
     * 查詢所有資料
     *
     * @throws Exception
     */
    @GetMapping("/queryAll")
    public void queryAll() throws Exception {
        String method = "POST";
        String endpoint = "/book/novel/_search";
        HttpEntity entity = new NStringEntity("{\n" +
                "  \"query\": {\n" +
                "    \"match_all\": {}\n" +
                "  }\n" +
                "}", ContentType.APPLICATION_JSON);

        Response response = restClient.performRequest(method, endpoint, Collections.emptyMap(), entity);
        System.out.println(EntityUtils.toString(response.getEntity()));
        System.out.println("查詢所有資料:queryAll !!!");
        // 傳回結果
        // {"took":140,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_index":"book","_type":"novel","_id":"1","_score":1.0,"_source":{"count":10,"name":"三國演義","publishDate":1555825698934,"writer":"張飛"}}]}}
    }

    /**
     * 根據ID擷取
     *
     * @throws Exception
     */
    @GetMapping("/queryByField")
    public void queryByField() throws Exception {
        String method = "POST";
        String endpoint = "/book/novel/_search";
        HttpEntity entity = new NStringEntity("{\n" +
                "  \"query\": {\n" +
                "    \"match\": {\n" +
                "      \"name\": \"三國\"\n" +
                "    }\n" +
                "  }\n" +
                "}", ContentType.APPLICATION_JSON);

        Response response = restClient.performRequest(method, endpoint, Collections.emptyMap(), entity);
        System.out.println(EntityUtils.toString(response.getEntity()));
        // 傳回結果
        // {"took":3,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":1,"max_score":0.5753642,"hits":[{"_index":"book","_type":"novel","_id":"1","_score":0.5753642,"_source":{"count":10,"name":"三國演義","publishDate":1555825698934,"writer":"張飛"}}]}}
    }

    /**
     * 更新資料
     *
     * @throws Exception
     */
    @GetMapping("/updateDocument")
    public void updateDocument() throws Exception {
// doc_as_upsert :使用doc_as_upsert可以在文檔不存在的時候,把doc中的内容插入到文檔中
        String method = "POST";
        String endpoint = "/book/novel/1/_update";
        HttpEntity entity = new NStringEntity("{\n" +
                "  \"doc\": {\n" +
                "    \"name\":\"三國演義修改哈哈哈\"\n" +
                "	}\n" +
                "}", ContentType.APPLICATION_JSON);
        Response response = restClient.performRequest(method, endpoint, Collections.emptyMap(), entity);
        System.out.println(EntityUtils.toString(response.getEntity()));
    }

    /**
     * 删除資料
     *
     * @throws Exception
     */
    @GetMapping("/deleteDocument")
    public void deleteDocument() throws Exception {
        String method = "DELETE";
        String endpoint = "/book/novel/1";
        HttpEntity entity = new NStringEntity("", ContentType.APPLICATION_JSON);
        Response response = restClient.performRequest(method, endpoint, Collections.emptyMap(), entity);
        System.out.println(EntityUtils.toString(response.getEntity()));
        // 傳回結果
        // {"_index":"book","_type":"novel","_id":"1","_version":5,"result":"deleted","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":4,"_primary_term":1}
    }

    /**
     * 按條件删除資料
     *
     * @throws Exception
     */
    @GetMapping("/deleteDocumentByCondition")
    public void deleteDocumentByCondition() throws Exception {
        String method = "DELETE";
        String endpoint = "/book/novel/_delete_by_query ";
       /* {
            "query":{
            "term":{
                "author":"test2"
            }
        }
        }*/

    /*    HttpEntity entity = new NStringEntity("{\n" +
                "  \"query\": {\n" +
                "    \"term\":\"三國演義修改哈哈哈\"\n" +
                "	}\n" +
                "}", ContentType.APPLICATION_JSON);*/
        Response response = restClient.performRequest(method, endpoint, Collections.emptyMap(), entity);
        System.out.println(EntityUtils.toString(response.getEntity()));
    }
}
           

補充:

1、使用

doc_as_upsert

可以在文檔不存在的時候,把doc中的内容插入到文檔中。

curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
    "doc" : {
        "name" : "new_name"
    },
    "doc_as_upsert" : true
}'
           

2、retry_on_conflict

當執行索引和更新的時候,有可能另一個程序正在執行更新。這個時候就會造成沖突,
這個參數就是用于定義當遇到沖突時,再過多長時間執行操作。
           

繼續閱讀