elasticsearch实现增删改查操作restClient.performRequest

1、pom文件新增依赖

        
			org.elasticsearch.client
			elasticsearch-rest-client
			6.3.1
		

		
		
			com.alibaba
			fastjson
			1.2.39
		

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

当执行索引和更新的时候,有可能另一个进程正在执行更新。这个时候就会造成冲突,
这个参数就是用于定义当遇到冲突时,再过多长时间执行操作。

 

你可能感兴趣的:(ElasticSearch,elasticsearch,restClient)