ElasticSearch整合springboot文档的API操作

首先我们导入个pom依赖,后面会用到

 <!--将json格式对象转化成字符串-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.6</version>
        </dependency>

RestHighLevelClient这个是自己实例的对象

@Configuration
public class ElasticSearchAPIConfig {
    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient (RestClient.builder (
                //如果是集群就构建多个,如果不是集群就构建一个
                        new HttpHost ("127.0.0.1", 9200, "http")
                ));
        return client;
    }
}

pojo类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private Integer age;

}

添加文档

在测试类中编写代码

@SpringBootTest
class EsApiApplicationTests {
    //面向对象来操作
    @Autowired
    private RestHighLevelClient restHighLevelClient;

  /**
     * 添加文档
     */

    @Test
    void testAddDocument() throws IOException {
        //1.创建对象
        User user = new User ("李源志",20);
        //2.创建请求
        IndexRequest request = new IndexRequest ("liyuanzhi_index");
        //3.规则 put  /liyuanzhi_index/_doc/1
        //put   Restful风格的请求参数
        //liyuanzhi_index  索引(在mysql数据库中称数据库)
        //_doc  文档(随着版本的更新以后会被删除)
        //1   id
        //id设置
        request.id ("1");
        //方式一:   超时设置为1秒    默认为1秒
        request.timeout (TimeValue.timeValueSeconds (1));
        //方式二:   超时设置为1秒  request.timeout ("1s");

        //4.将我们数据放入请求    json
        IndexRequest source = request.source (JSON.toJSONString (user), XContentType.JSON);
        //5.客户端发送请求    获取响应结果
        IndexResponse indexResponse = restHighLevelClient.index (request, RequestOptions.DEFAULT);
        //打印返回的结果
        System.out.println (indexResponse.toString ());
        //查看是否成功
        System.out.println (indexResponse.status ());

    }



}

运行结果

获取文档

  /**
     * 获取文档
     */
    @Test
    void testIsExists() throws IOException {
        //1.创建获取请求
        GetRequest getRequest = new GetRequest ("liyuanzhi_index", "1");
        //设置 不获取返回的 _source 的上下文
        getRequest.fetchSourceContext (new FetchSourceContext (false));
        //配置排序的字段
        getRequest.storedFields ("_none_");
        //2.判断是否存在
        boolean exists = restHighLevelClient.exists (getRequest, RequestOptions.DEFAULT);
        if (exists){
            System.out.println ("文档存在");
        }else {
            System.out.println ("文档不存在");
        }

    }
    @Test
    void testGetDocument() throws IOException {
        //1.创建获取请求
        GetRequest getRequest = new GetRequest ("liyuanzhi_index", "1");
        //获取索引
        GetResponse getResponse = restHighLevelClient.get (getRequest, RequestOptions.DEFAULT);
        //打印文档内容
        System.out.println (getResponse.getSourceAsString ());
        //输出getResponse
        System.out.println (getResponse);
    }

这里我们为什么要分开写呢?

因为我们使用RestHighLevelClientAPI获取一次后,里面获取的数据就没了。

我们是先判断了文档是否存在的,已经调用过一次了,如果在使用RestHighLevelClientAPI调用get的时候name获取出来的值将为null

 

更新文档

/**
     * 更新文档
     */
    @Test
    void testUpdateDocument() throws IOException {
        //1.创建更新请求
        UpdateRequest updateRequest = new UpdateRequest ("liyuanzhi_index", "1");
        //设置超时时间为1s
        updateRequest.timeout ("1s");
        //2.创建一个对象
        User user = new User ("不知火舞", 21);
        //3.利用doc进行修改
        updateRequest.doc (JSON.toJSONString (user),XContentType.JSON);
        //4.接受请求
        UpdateResponse updateResponse = restHighLevelClient.update (updateRequest, RequestOptions.DEFAULT);
        //5.将数据返回
        System.out.println (updateResponse.toString ());
        //查看下是否更新成功
        System.out.println (updateResponse.status ());
    }

删除文档

/**
     * 删除文档
     */
    @Test
    void testDeleteDocument() throws IOException {
        //1.创建删除请求
        DeleteRequest deleteRequest = new DeleteRequest ("liyuanzhi_index", "1");
        //设置超时时间为1s
        deleteRequest.timeout ("1s");
        //2.接受删除请求
        DeleteResponse deleteResponse = restHighLevelClient.delete (deleteRequest, RequestOptions.DEFAULT);
        //3.查看下是否删除成功
        RestStatus status = deleteResponse.status ();
        System.out.println (status.getStatus ());
    }

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值