验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

ElasticSearch整合SpringBoot搭建配置的方法是什么

阅读:1385 来源:乙速云 作者:代码code

ElasticSearch整合SpringBoot搭建配置的方法是什么

      项目搭建

      老规矩,先建maven项目,下面是我的pom.xml

      
      
          4.0.0
          org.example
          springboot-es-all
          1.0-SNAPSHOT
          
              1.8
          
          
              org.springframework.boot
              spring-boot-starter-parent
              2.1.3.RELEASE
          
          
              
              
                  org.springframework.boot
                  spring-boot-starter-test
              
              
              
                  org.elasticsearch.client
                  elasticsearch-rest-client
                  7.8.0
              
              
                  org.elasticsearch
                  elasticsearch
                  7.8.0
              
              
                  org.elasticsearch.client
                  elasticsearch-rest-high-level-client
                  7.8.0
              
              
              
                  cn.hutool
                  hutool-all
                  5.8.4
              
              
              
                  com.alibaba
                  fastjson
                  1.2.58
              
              
                   org.slf4j 
                   slf4j-api 
                   1.6.4 
              
              
                  org.slf4j
                  slf4j-simple
                  1.7.25
                  compile
              
              
                  org.projectlombok
                  lombok
              
          
          
              
                  
                      org.springframework.boot
                      spring-boot-maven-plugin
                      2.1.3.RELEASE
                  
              
          
      

      这里我使用的是elasticsearch-rest-high-level-client官方客户端,建议大家尽量用官方的,因为随着es的不断升级,很多api都过时了,如果你使用spring-boot-starter-data-elasticsearch这个要依赖社区去维护,很多新特性你没法使用到,也会存在安全性问题。

      配置客户端

      启动类:

      @SpringBootApplication
      public class EsStudyApplication {
          public static void main(String[] args) {
              SpringApplication.run(EsStudyApplication.class, args);
          }
      }

      配置文件 application.yml:

      server:
        port: 9000
      elasticsearch:
        host: 0.0.0.0
        port: 9200
        username:
        password:

      客户端配置 config.EsClientConfig:

      @Configuration
      public class EsClientConfig {
          @Value("${elasticsearch.host}")
          private String host;
          @Value("${elasticsearch.port}")
          private int port;
          @Value("${elasticsearch.username}")
          private String userName;
          @Value("${elasticsearch.password}")
          private String password;
          @Bean
          public RestHighLevelClient restHighLevelClient() {
              final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
              credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
              RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
                      RestClient.builder(new HttpHost( host, port, "http")).setHttpClientConfigCallback(httpClientBuilder -> {
                          httpClientBuilder.setMaxConnTotal(500);
                          httpClientBuilder.setMaxConnPerRoute(300);
                          return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                      })
              );
              return restHighLevelClient;
          }
      }

      然后客户端我们就配好了,客户端的配置其实还有很多,感兴趣的同学自行查阅。后续使用的时候,直接导入RestHighLevelClient实例就好了

      接着启动它,如果控制没有报错,说明配置没啥问题了, 记得要开启es服务~

      索引API初探 & Index API

      下面我们写一点测试用例,来验证我们是否可以操作es,为了方便演示,这里直接使用SpringBootTest来测试,大家平时在写springboot项目,类测试的时候也可以这么做

      ping

      新建api.IndexApi,调用ping()方法来测试是否链接成功:

      @Slf4j
      @SpringBootTest
      public class IndexApi {
          /**
           * es 索引
           */
          public static final String index = "study";
          @Autowired
          private RestHighLevelClient client;
          @Test
          public void ping() throws IOException {
              if(client.ping(RequestOptions.DEFAULT)) {
                  log.info("链接成功");
              }else {
                  log.info("链接失败 !");
              }
          }
      }

      点击IndexApi左上角的绿色箭头启动测试用例, 如果报错,尝试添加以下 注解

      @RunWith(SpringRunner.class)
      @SpringBootTest(classes = { EsStudyApplication.class })
      public class IndexApi {....}

      返回:

      链接成功

      说明客户端es服务端是通的

      创建索引 & create

      通过前面的学习,有了一定的基础之后,回到代码中其实就是调调方法,因为你知道了这个代码的逻辑做了什么操作。下面来看下如何创建索引:

      /**
           * 创建索引
           */
          @Test
          public void createIndex() throws IOException {
              CreateIndexRequest request = new CreateIndexRequest(index);
              CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
              log.info("创建索引 ===> "+ JSONObject.toJSONString(createIndexResponse)); // 创建索引 ===> {"acknowledged":true,"fragment":false,"shardsAcknowledged":true}
          }

      大家可以返回到kibana中查看索引是否被创建,从而验证代码执行是否成功

      添加别名:

      // alias
      request.alias(new Alias("study_alias"));

      索引设置settings:

      // index settings
      request.settings(
              Settings.builder()
                      .put("index.number_of_shards", 3)
                      .put("index.number_of_replicas", 2)
      );

      索引映射mapping:

       // index mappings
      //        {
      //            "mapping": {
      //            "_doc": {
      //                "properties": {
      //                    "name": {
      //                        "type": "text"
      //                    }
      //                }
      //            }
      //        }
      //        }
      XContentBuilder builder = XContentFactory.jsonBuilder();
      builder.startObject();
      {
          builder.startObject("properties");
          {
              builder.startObject("name");
              {
                  builder.field("type", "text");
              }
              builder.endObject();
          }
          builder.endObject();
      }
      builder.endObject();
      request.mapping(builder);

      设置请求超时时间:

      // 请求设置
      request.setTimeout(TimeValue.timeValueMinutes(1));

      索引是否存在 & exist

       /**
          * 判断索引是否存在
          * @throws IOException
          */
      @Test
      public void existIndex() throws IOException {
          GetIndexRequest request = new GetIndexRequest(index);
          boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
          log.info("索引{}存在 ===> {}", index, exists);
      }

      删除索引

       /**
          * 删除索引
          * @throws IOException
          */
      @Test
      public void delIndex() throws IOException {
          DeleteIndexRequest request = new DeleteIndexRequest(index);
          AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
          log.info("删除索引 ===> {}", JSONObject.toJSONString(delete)); // 删除索引 ===> {"acknowledged":true,"fragment":false}
      }
    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>