栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot整合ElasticSearch

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot整合ElasticSearch

目录

1.导入依赖

1.注意事项

2.编写配置类

3.测试

1.索引的操作

1.创建索引

 2.获取索引

 3.删除索引

 2.文档操作

1.添加文档

2.获取文档信息

3.判断文档信息

4.更新文档

5.删除文档

6.查询文档

7.批量操作文档

8.聚合操作


1.导入依赖
 
    org.elasticsearch.client
    elasticsearch-rest-high-level-client
    7.6.2
 

1.注意事项

需要将spring-boot-starter-parent父依赖中的spring-boot-dependencies

7.6.2改成和es版本一样

2.编写配置类
@Configuration
public class ElasticSearchConfig {
    // 注册 rest高级客户端
    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("192.168.56.10",9200,"http")
                )
        );
        return client;
    }
}
new HttpHost("192.168.56.10",9200,"http")对应自己的ip地址,端口号,协议。

3.测试

1.索引的操作

1.创建索引

所有操作的前提是注入RestHighLevelClient restHighLevelClient;

   @Test
    public void createIndex() throws IOException {
        CreateIndexRequest createIndexRequest =new CreateIndexRequest("es_index");
        CreateIndexResponse createIndexResponse =restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);

        System.out.println(createIndexResponse.isAcknowledged()); //查看是否创建成功
        System.out.println(createIndexResponse) ; //查看返回对象
        restHighLevelClient.close();
    }

kibana查看结果

 2.获取索引
 @Test
    public void  indexIsExists() throws IOException {
        GetIndexRequest getIndexRequest =new GetIndexRequest("es_index");
        boolean exists = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
        System.out.println(exists);//索引是否存在
        restHighLevelClient.close();

    }

控制台查看结果 返回true即索引存在

 3.删除索引
    @Test
    public void deleteIndex() throws IOException {
        DeleteIndexRequest deleteIndexRequest =new DeleteIndexRequest("es_index");
        AcknowledgedResponse acknowledgedResponse = restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
        System.out.println(acknowledgedResponse.isAcknowledged());//是否删除成功
        restHighLevelClient.close();

    }

kibana查看效果

 2.文档操作

1.添加文档
  @Test
    public void addDoc() throws IOException {

        //创建user对象
        User user = new User(18, "james");
        //创建索引请求
        IndexRequest indexRequest = new IndexRequest("user_index");
        //设置文档id
        indexRequest.id("1");
        indexRequest.timeout(TimeValue.timeValueMillis(1000));
        //把数据放入请求中
        indexRequest.source(JSON.toJSONString(user), XContentType.JSON);
        //es客户端发送请求
        IndexResponse response = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println(response.status());//获取响应数据状态-->CREATED
        System.out.println(response);//查看内容
    }

2.获取文档信息
   @Test
    public void getDoc() throws IOException {
        GetRequest getRequest=new GetRequest("user_index","1");
        GetResponse response = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
        System.out.println(response.getSourceAsMap());//打印文档内容map {name=james, age=18}
        restHighLevelClient.close();
    }

3.判断文档信息
  public void existsDoc() throws IOException {
        GetRequest getRequest=new GetRequest("user_index","1");
        boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);//true
    }

4.更新文档
  @Test
    public void updateDoc() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest("user_index","1");
        User user=new User(24,"kobe");
        updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
        UpdateResponse response = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(response.status());//OK
        restHighLevelClient.close();
    }

5.删除文档
 @Test
    public void deleteDoc() throws IOException {
        DeleteRequest deleteRequest = new DeleteRequest("user_index","1");
        DeleteResponse response = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println(response.status());//ok
    }

6.查询文档
@Test
    public void searchTest() throws IOException {
        //创建查询请求对象
        SearchRequest searchRequest=new SearchRequest();
        //指定索引
        searchRequest.indices("user_index");
        //构造搜素条件
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        //精确查询
        //TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "liuyou");
        //匹配查询
        MatchQueryBuilder matchAllQueryBuilder = QueryBuilders.matchQuery("name","james");
        //设置高亮
        searchSourceBuilder.highlighter(new HighlightBuilder());
        //构造条件
        searchSourceBuilder.query(matchAllQueryBuilder);
        //添加条件请求
        searchRequest.source(searchSourceBuilder);
        //客户端查询
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        for (SearchHit hit : hits.getHits()) {
            System.out.println(hit.getSourceAsMap());
        }


    }

7.批量操作文档
 @Test
    public void bulkTest() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        ArrayList users = new ArrayList<>();
        users.add(new User(1, "derick rose"));
        users.add(new User(2, "john wall"));
        users.add(new User(3, "brad bill"));
        users.add(new User(6, "james wall"));

        // 批量请求处理
        for (int i = 0; i < users.size(); i++) {
            bulkRequest.add(
                    // 这里是数据信息
                    new IndexRequest("nba_index")
                            .id("" + (i + 1)) // 没有设置id 会自定生成一个随机id
                            .source(JSON.toJSONString(users.get(i)), XContentType.JSON)
            );
        }
        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk.status());// ok
    }

8.聚合操作
 @Test
    public void aggregationTest() throws IOException {
        //创建索引请求
        SearchRequest request = new SearchRequest();
        request.indices("nba_index");

        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "wall");

        //构造检索条件
        searchSourceBuilder.query(matchQueryBuilder);

        //聚合函数聚合名字ageAgg field:属性 按照年龄的值分布聚合
        TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10);
        searchSourceBuilder.aggregation(ageAgg);

        //计算平均薪资聚合
        AvgAggregationBuilder ageAvg1 = AggregationBuilders.avg("ageAvg").field("age");
        searchSourceBuilder.aggregation(ageAvg1);
        System.out.println("检索内容:" + searchSourceBuilder.toString());

        request.source(searchSourceBuilder);

        //执行检索
        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);

        SearchHits hits = searchResponse.getHits();
        hits.forEach(hit -> {
                    String s = hit.getSourceAsString();
                    System.out.println("分片信息:" + s);
                    //分片信息:{"age":2,"name":"john wall"}
                    //分片信息:{"age":6,"name":"james wall"}
                }
        );
        //获取检索到的分析信息
        Aggregations aggregations = searchResponse.getAggregations();
        Terms ageAvg = aggregations.get("ageAgg");
        for (Terms.Bucket bucket : ageAvg.getBuckets()
        ) {
            String keyAsString = bucket.getKeyAsString();
            System.out.println("年龄" + keyAsString);//年龄2 年龄6
        }

        Avg aggregation = aggregations.get("ageAvg");
        System.out.println("平均年龄:" + aggregation.getValue());//平均年龄:4.0
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1013201.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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