SpringBoot整合ElasticSearch

目录

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查看结果

SpringBoot整合ElasticSearch

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即索引存在

SpringBoot整合ElasticSearch

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查看效果

SpringBoot整合ElasticSearch

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
    }
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章