• springboot整合Elasticsearch简单操作


    概述

      Java存在三种es的客户端

    1. Transport Client
    2. Java Low Level Rest Client
    3. Java High Level Rest Client

    造成这种混乱的原因是es开始是没有Java版的客户端,但Java自己是可以简单的支持es的API,所以有了第一种客户端(Transport Client)。后来官方推出了第二种版本(Java Low Level Rest Client),但缺点也是显而易见的,因为从第一种版本迁移到第二版本工作量是比较的大的,官方还特意出一堆文档来提供参考。而第三种版本的客户端是兼容两种客户端的优点,他是在第二种版本的基础上进行了封装,也让代码迁移变得更方便,但依然存在缺点,小的版本更新频繁,经常出现莫名其妙的错误,我们尽量保持客户端和服务器相同的版本。lz这边的用的是es 6.6.2版本

    整合

    搭建springboot框架就不介绍了,直接看下依赖jar

      <!--es引入-->
            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-high-level-client</artifactId>
                <version>6.6.2</version>
            </dependency>

    创建EsConfig类

    import org.apache.http.HttpHost;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     *
     * Description:es配置
     * @author huangweicheng
     * @date 2020/3/19
    */
    @Configuration
    public class EsConfig {
    
        @Bean
        public RestHighLevelClient restHighLevelClient(){
            RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(
                            new HttpHost("10.105.9.119",9200,"http")
                    )
            );
            return client;
        }
    }

    接下去就很简单了,去调用客户端的API操作即可

    查找

    先看下在服务端的数据

     

     查询id为1的文档

        @Autowired
        private RestHighLevelClient client;
    
        @GetMapping("/teacher")
        public ResponseEntity get(@RequestParam(value = "id",defaultValue = "") String id) throws IOException {
            try {
                if (id.isEmpty()){
                    return new ResponseEntity(HttpStatus.NOT_FOUND);
                }
                GetRequest request = new GetRequest("user","teacher",id);
                GetResponse result = client.get(request, RequestOptions.DEFAULT);
                if (!result.isExists()){
                    return new ResponseEntity(HttpStatus.NOT_FOUND);
                }
                return new ResponseEntity(result.getSource(),HttpStatus.OK);
            }catch (Exception e){
                e.printStackTrace();
            }
            return null;
        }

    结果

     

     添加

        @PostMapping("/add")
        public ResponseEntity add(
                @RequestParam String name,
                @RequestParam String gender,
                @RequestParam int age,
                @RequestParam String country,
                @RequestParam String date
        ) throws IOException {
            XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()
                    .startObject()
                    .field("name",name)
                    .field("gender",gender)
                    .field("age",age)
                    .field("country",country)
                    .field("date",date)
                    .endObject();
            IndexRequest indexRequest = new IndexRequest("user","teacher");
            indexRequest.source(xContentBuilder);
            IndexResponse response = client.index(indexRequest,RequestOptions.DEFAULT);
            return new ResponseEntity(response.getId(),HttpStatus.OK);
        }

    结果

     

     

    修改

     @PutMapping("/update/teacher")
        public ResponseEntity update(
                @RequestParam(name = "id") String id,
                @RequestParam(name = "name",required = false) String name,
                @RequestParam(name = "gender",required = false) String gender
        ) throws IOException
        {
            UpdateRequest updateRequest = new UpdateRequest("user","teacher",id);
            XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()
                    .startObject()
                    .field("name",name)
                    .field("gender",gender)
                    .endObject();
            updateRequest.doc(xContentBuilder);
            UpdateResponse result = client.update(updateRequest,RequestOptions.DEFAULT);
            return new ResponseEntity(result.getId(),HttpStatus.OK);
        }

     

     

    删除

    将刚才添加的数据删除

    @DeleteMapping("/delete/teacher")
        public ResponseEntity delete(@RequestParam(name = "id") String id) throws IOException
        {
            DeleteRequest deleteRequest = new DeleteRequest("user","teacher",id);
            DeleteResponse deleteResponse = client.delete(deleteRequest,RequestOptions.DEFAULT);
            return new ResponseEntity(deleteResponse.status(),HttpStatus.OK);
        }

     

     以上就是springboot整合es后基本操作,下面是完整的伪代码

    import com.alibaba.fastjson.annotation.JSONField;
    import org.elasticsearch.action.delete.DeleteRequest;
    import org.elasticsearch.action.delete.DeleteResponse;
    import org.elasticsearch.action.get.GetRequest;
    import org.elasticsearch.action.get.GetResponse;
    import org.elasticsearch.action.index.IndexRequest;
    import org.elasticsearch.action.index.IndexResponse;
    import org.elasticsearch.action.update.UpdateRequest;
    import org.elasticsearch.action.update.UpdateResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.common.xcontent.XContentBuilder;
    import org.elasticsearch.common.xcontent.XContentFactory;
    import org.elasticsearch.index.get.GetResult;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.format.annotation.DateTimeFormat;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.*;
    
    import java.io.IOException;
    import java.util.Date;
    
    /**
     * 
     * Description:
     * @author huangweicheng
     * @date 2020/3/19   
    */ 
    @RestController
    @ResponseBody
    @RequestMapping("/user")
    public class UserController {
    
        @Autowired
        private RestHighLevelClient client;
    
        @GetMapping("/teacher")
        public ResponseEntity get(@RequestParam(value = "id",defaultValue = "") String id) throws IOException {
            try {
                if (id.isEmpty()){
                    return new ResponseEntity(HttpStatus.NOT_FOUND);
                }
                GetRequest request = new GetRequest("user","teacher",id);
                GetResponse result = client.get(request, RequestOptions.DEFAULT);
                if (!result.isExists()){
                    return new ResponseEntity(HttpStatus.NOT_FOUND);
                }
                return new ResponseEntity(result.getSource(),HttpStatus.OK);
            }catch (Exception e){
                e.printStackTrace();
            }
            return null;
        }
    
        @PostMapping("/add")
        public ResponseEntity add(
                @RequestParam String name,
                @RequestParam String gender,
                @RequestParam int age,
                @RequestParam String country,
                @RequestParam String date
        ) throws IOException {
            XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()
                    .startObject()
                    .field("name",name)
                    .field("gender",gender)
                    .field("age",age)
                    .field("country",country)
                    .field("date",date)
                    .endObject();
            IndexRequest indexRequest = new IndexRequest("user","teacher");
            indexRequest.source(xContentBuilder);
            IndexResponse response = client.index(indexRequest,RequestOptions.DEFAULT);
            return new ResponseEntity(response.getId(),HttpStatus.OK);
        }
    
        @DeleteMapping("/delete/teacher")
        public ResponseEntity delete(@RequestParam(name = "id") String id) throws IOException
        {
            DeleteRequest deleteRequest = new DeleteRequest("user","teacher",id);
            DeleteResponse deleteResponse = client.delete(deleteRequest,RequestOptions.DEFAULT);
            return new ResponseEntity(deleteResponse.status(),HttpStatus.OK);
        }
    
        @PutMapping("/update/teacher")
        public ResponseEntity update(
                @RequestParam(name = "id") String id,
                @RequestParam(name = "name",required = false) String name,
                @RequestParam(name = "gender",required = false) String gender
        ) throws IOException
        {
            UpdateRequest updateRequest = new UpdateRequest("user","teacher",id);
            XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()
                    .startObject()
                    .field("name",name)
                    .field("gender",gender)
                    .endObject();
            updateRequest.doc(xContentBuilder);
            UpdateResponse result = client.update(updateRequest,RequestOptions.DEFAULT);
            return new ResponseEntity(result.getId(),HttpStatus.OK);
        }
    
    }

     

  • 相关阅读:
    mysql远程连接失败的解决方法(CentOS版)
    【lamp】搭建
    【wamp】WAMP配置与单IP多域名功能设置
    【centos】网卡自动联网
    stm32之keil开发环境搭建
    利用ffmpeg将H264流 解码为RGB 分类: VC++ ffmpeg-SDL-VLC-Live555 2015-08-07 11:39 155人阅读 评论(0) 收藏
    使用ffserver实现转发实时流媒体(摄像头捕获) 分类: TI-AM335X arm-linux-Ubuntu ffmpeg-SDL-VLC-Live555 2015-08-04 09:36 5人阅读 评论(0) 收藏
    ffmpeg+ffserver搭建流媒体服务器 分类: arm-linux-Ubuntu ffmpeg-SDL-VLC-Live555 TI-AM335X 2015-08-04 09:35 6人阅读 评论(0) 收藏
    嵌入式linux------ffmpeg移植 编码H264(am335x编码H264) 分类: TI-AM335X ffmpeg-SDL-VLC-Live555 arm-linux-Ubuntu 2015-08-04 09:34 5人阅读 评论(0) 收藏
    嵌入式linux------ffmpeg移植 解码H264(am335x解码H264到yuv420并通过SDL显示) 分类: arm-linux-Ubuntu TI-AM335X ffmpeg-SDL-VLC-Live555 2015-07-29 10:28 154人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/dslx/p/12525979.html
Copyright © 2020-2023  润新知