栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

03Springboot集成ElasticSearch

03Springboot集成ElasticSearch

1.导入相关依赖
 
        
            org.springframework.boot
            spring-boot-starter-data-elasticsearch
        
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            com.alibaba
            fastjson
            1.2.74
        
    

注意的是:elasticSearch的版本如果与客户端不一致需要自定义版本

2.通过配置类注入restHighLevelClient

注意添加注解 @Configuration,这样可以通过@Autowired来注入

@Configuration
public class ElasticSearchConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client=new RestHighLevelClient(
                RestClient.builder(new HttpHost("127.0.0.1",9200,"http"))
        );
          return client;
    }
}

3.索引测试

1.创建索引
需要注入RestHighLevelClient

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    @Test
    void testCreateIndex() throws IOException {
        CreateIndexRequest indexRequest = new CreateIndexRequest("wang_index");
        CreateIndexResponse response = restHighLevelClient.indices().create(indexRequest, RequestOptions.DEFAULT);
        System.out.println(response);
    }
}

测试:
后台输出日志:

可视化界面查看:

2.索引是否存在

若索引存在则返回true,不存在则false

@Test
    void ExistIndex() throws IOException{
        GetIndexRequest request=new GetIndexRequest("wang_index");
        boolean exists = restHighLevelClient.indices().exists(request,RequestOptions.DEFAULT);
        System.out.println(exists);
    }

测试:

3.删除索引
  @Test
    void delIndex()throws IOException{
        DeleteIndexRequest request=new DeleteIndexRequest("wang_index");
        AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    }
}

注意观察返回对象与在可视化页面操作删除索引的过程是对应的上的。
测试:

发现索引已经删除

4.文档测试

1.添加文档

新建实体类User并且导入AlibabaFastJson的依赖

@Test
    void adddocument() throws IOException{
    //创建对象
        User user=new User("wangcj",23);
        //创建请求
        IndexRequest request=new IndexRequest("wang_index");
        //规则:put/wang_index/1
        request.id("1");
        request.timeout(Timevalue.timevalueSeconds(1));
//        request.timeout("1");
//将数据放入到Json
        request.source(JSON.toJSONString(user), XContentType.JSON);
//客户端发送请求,获取响应结果
        IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
        System.out.println(response.status()+response.toString());
    }
}

测试:


2.获取文档是否存在

    @Test
    //规则:get/index/_doc/1
    void existdocument() throws IOException{
        GetRequest getRequest=new GetRequest("wang_index","1");
        getRequest.storedFields("name","age");
        //不返回上下文的内容
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);
    }
}

测试:

3.获取文档信息

    @Test
    void getdocument() throws IOException{
        GetRequest getRequest=new GetRequest("wang_index","1");
        GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
        System.out.println(documentFields.getSourceAsString());//打印文档内容
        System.out.println(documentFields);
//返回内容与命令一样
    }
}

测试:

4.更新文档信息

    void updatedocument() throws IOException{
        UpdateRequest updateRequest=new UpdateRequest("wang_index","1");
        updateRequest.timeout("1s");
        User user=new User("wangcj",25);
        updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
        UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(update.status());
    }
}

测试:

5.删除文档

   @Test
    void deletedocument() throws IOException{
        DeleteRequest deleteRequest=new DeleteRequest("wang_index","1");
        deleteRequest.timeout("1s");
        DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println(delete.status());
    }

6.批量插入

@Test
    void bulkAdddocuments() throws IOException{//批量操作
        BulkRequest bulkRequest=new BulkRequest();
        List users=new ArrayList<>();
        users.add(new User("wangcjj",23));
        users.add(new User("chenyh",21));
        for (int i = 0; i < users.size(); i++) {
            bulkRequest.add(new IndexRequest("wang_index")
                    .id(""+(i+1))
                    .source(JSON.toJSONString(users.get(i)),XContentType.JSON));
        }
//批处理请求
        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk.hasFailures());//是否失败 false则代表没有失败
    }

测试:

7.批量查询
//查询
//searchRequest搜索请求
//searchSourceBuild 条件构造
//highLightBuild 构建高亮

@Test
    void bulkQuerydocument() throws IOException{//批量查询操作
        SearchRequest searchRequest=new SearchRequest();
        //构建搜索条件
        SearchSourceBuilder searchSourceBuilder=new SearchSourceBuilder();
//查询条件我们可以使用QueryBuild工具来实现
        //精确查询
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "wangcj");
        //查询全部
        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
        searchSourceBuilder.timeout(Timevalue.MINUS_ONE);

        searchSourceBuilder.query(matchAllQueryBuilder);
        searchRequest.source(searchSourceBuilder);

        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(search.getHits()));

        SearchHit[] hits = search.getHits().getHits();
        for (SearchHit hit: hits
             ) {
            System.out.println(hit.getSourceAsMap());
        }
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/780116.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号