elasticsearch集成springboot使用

Springboot整合ES

  • 基本使用

    • 官方api

      1. https://www.elastic.co/进入官网
      2. 找到Elasticsearch CLients 下的 Java REST Client[7.6]–other versions 并点击进去 [最为常用的restful风格的java客户端版本]
      3. 选择 JAVA High level Rest Client 一般都使用高级的客户端
      4. 找到原生的依赖,当然也可以直接在创建springboot工程的时候选择添加它依赖
    • 编写配置类(cv即可)

      1. 交给spring管理
      @Configuration
      public class ElasticSearchConfig {
      
          @Bean
          public RestHighLevelClient restHighLevelClient(){
              RestHighLevelClient client = new RestHighLevelClient(
                      RestClient.builder(
                              new HttpHost("localhost", 9200, "http")));
      
        				 return client;
          }
      }
      
      1. es文档curd操作
       @Resource
          private RestHighLevelClient restHighLevelClient;
      
      //测试创建文档  把数据库得数据放进es索引库  添加操作:IndexRequest
          @Test
          void testCreateDoc() throws IOException {
              //数据库查询到出来的数据
             Object data = dao.selectById();
              //创建文档请求   这里举例:demo
              IndexRequest req = new IndexRequest("demo(自定义文档名称(也可以说当初是数据库的表名方便理解))");
            
      
              //规则 put/索引名称/_doc/id值
              req.id("1");
              req.timeout(TimeValue.timeValueSeconds(1));
              req.timeout("1s");
              //将我们得数据放进请求 json数据   先转换成json数据
              req.source(JSON.toJSONString(data), XContentType.JSON);
      
              //客户端发送请求
              IndexResponse indices = restHighLevelClient.index(req,RequestOptions.DEFAULT);
      
              System.out.println(indices.toString());
              System.out.println(indices.status());
          }
      
      
      
      
      
      //获取文档的信息  查询操作 GetRequest
          @Test
          void testGetDocInfo() throws IOException {
              GetRequest re = new GetRequest("demo","1");
              GetResponse documentFields = restHighLevelClient.get(re, RequestOptions.DEFAULT);
              System.out.println(documentFields.getSourceAsString());
              System.out.println(documentFields);
          }
      
      
      
      
      //更新文档的信息 更新操作  UpdateRequest
          @Test
          void testGetDoc() throws IOException {
              UpdateRequest req = new UpdateRequest("demo", "1");
              req.timeout("1s");
      
             	Object demoObj = dao.update(1);
              req.doc(JSON.toJSONString(demoObj),XContentType.JSON);
      
              UpdateResponse updateResponse = restHighLevelClient.update(req, RequestOptions.DEFAULT);
      
              System.out.println(updateResponse.status());
      
      
          }
      
      
       //删除文档记录
          @Test
          void testDeleteReq() throws IOException {
              DeleteRequest req = new DeleteRequest("demo", "1");
              req.timeout("1s");
      
              DeleteResponse delete = restHighLevelClient.delete(req, RequestOptions.DEFAULT);
              System.out.println(delete.status());
          }
      
      
      
      
      
      //大批量添加数据进Es服务器
      	@Test
          void testBulkReq() throws IOException {
      
              BulkRequest bulkRequest = new BulkRequest();
              bulkRequest.timeout("10s");
      	
            //数据库获取数据
            List<User> userlist = dao.selectAll();
      
              for (int i = 0; i < userlist.size(); i++) {
                  //批量更新,批量删除就在这里更改对应的请求就可以了UpdateRequest DeleteRequest
               // bulkRequest.add(new UpdateRequest("demo")
                 // bulkRequest.add(new DeleteRequest("demo")
                  bulkRequest.add(new IndexRequest("demo")
                  .id(""+i)
                  .source(JSON.toJSONString(userlist.get(i)),XContentType.JSON));
              }
      
              BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
              //是否执行失败,返回false代表成功
              System.out.println(bulk.hasFailures());
          }
      
      
      
       //批量查询和高亮查询
      	//例子
          public List<Map<String,Object>> searchPageHighlight(String keyword,int pageNo,int pageSize) throws IOException {
              if (pageNo <= 0){
                  pageNo =1;
              }
      
              //1.条件搜索
              SearchRequest searchRequest = new SearchRequest("数据库表名(如果是从数据库查放进es)");
              SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
      
              //分页
              sourceBuilder.from(pageNo);
              sourceBuilder.size(pageSize);
      
              //精确匹配
              TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", keyword);
              sourceBuilder.query(termQueryBuilder);
              sourceBuilder.timeout(new TimeValue(60,TimeUnit.SECONDS));
      
              //设置高亮
              HighlightBuilder highlightBuilder = new HighlightBuilder();
              highlightBuilder.field("title");
              //多个高亮关闭,true开启;
              highlightBuilder.requireFieldMatch(false);
              highlightBuilder.preTags("<span style='color:red'>");
              highlightBuilder.postTags("</span>");
              sourceBuilder.highlighter(highlightBuilder);
      
             //执行搜索获得es查询的响应结果
              searchRequest.source(sourceBuilder);
              SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
      
              //响应结果放进list
              ArrayList<Map<String,Object>> list = new ArrayList<>();
              for (SearchHit hit : searchResponse.getHits().getHits()) {
                  //解析高亮字段
                  Map<String, HighlightField> highlightFields = hit.getHighlightFields();
                  //获取自己设置的高亮标题
                  HighlightField title = highlightFields.get("title");
                  //获取到了原本source里面的所有map
                  Map<String, Object> sourceAsMap = hit.getSourceAsMap();
                  //解析  将原来的字段换成我们定义的title高亮字段即可
                  if (title!=null){
                      Text[] fragments = title.fragments();
                      String highlighttitle = "";
                      for (Text text : fragments) {
                          highlighttitle += text;
                      }
                      //替换成高亮的字段 利用了map特性
                      sourceAsMap.put("title",highlighttitle);
                  }
      
                  list.add(sourceAsMap);
              }
              return list;
      
          }
      
      
      1. es 索引操作

         //测试索引得创建
            @Test
            void testCreateIndex() throws IOException {
                //1.新建索引请求  创建一个索引库
                CreateIndexRequest req = new CreateIndexRequest("demo");
                //2.客户端执行创建请求
                CreateIndexResponse createIndexResponse =
                        restHighLevelClient.indices().create(req, RequestOptions.DEFAULT);
                System.out.println(createIndexResponse);
            }
        
            //测试获取索引  判断索引是否存在
            @Test
            void testGetIndex() throws IOException {
                GetIndexRequest request = new GetIndexRequest("demo");
                //判断是否存在索引
                System.out.println(restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT));
            }
        
        
            //测试删除索引
            @Test
            void testDeleteIndex() throws IOException {
                DeleteIndexRequest request = new DeleteIndexRequest("demo");
               //删除
                AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
                System.out.println(delete.isAcknowledged());
        
            }
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值