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

java操作es进行增删改查

java操作es进行增删改查

上一篇文章我们已经在springboot中集成了Es,这次我们来继续使用java来给es发请求

    //测试存储到es
    @Test
    public void indexData() throws IOException {
        //指定索引
        IndexRequest indexRequest = new IndexRequest("users");
        indexRequest.id("1");
        User user = new User();
        String string = JSON.toJSonString(user);
        indexRequest.source(string, XContentType.JSON);
        //执行操作
        IndexResponse index = client.index(indexRequest, GulimallElasticSearchCongfig.COMMON_OPIONS);
        //提取有用的响应数据
        System.out.println(index);
    }
    @Data
    class User{
        private String uesrname;
        private String gander;
        private Integer age;
    }

我们先看一下es中是否存在users这个索引

并不存在我们进行一下操作 

插入成功,然后再在es中进行查看 

但是我们发现没有数据,因为没有set值重新set值一次执行操作后再看

 我们虽然之前指定了id是1,这次插入id还是1并没有报错。数据也成功插入,所以这个写法修改插入都可以。

实现一个复杂检索,之前我们在Kibana里面写的dsl来实现复杂检索,现在我们用Java来实现查找不同年龄分布的平均薪资

    @ToString
    @Data
    static class Accout {
        private int accountNumber;
        private int balance;
        private String firstName;
        private String lastName;
        private int age;
        private String gender;
        private String address;
        private String employer;
        private String email;
        private String city;
        private String state;
    } 

public void searchData() throws IOException {
        //创建检索请求
        SearchRequest searchRequest = new SearchRequest();
        //指定索引
        searchRequest.indices("bank");
        //指定DSL,创建检索条件
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //1.1构造检索条件
        searchSourceBuilder.query(QueryBuilders.matchQuery("address", "mill"));
        
//        searchSourceBuilder.size();
//        searchSourceBuilder.from();
        //1.2先创建不同的聚合条件再使用聚合查询方法,terms指定聚合的名称 field根据什么聚合 size展示多少
        TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10);
        searchSourceBuilder.aggregation(ageAgg);
        //1.3计算平均薪资
        AvgAggregationBuilder balanceAvg = AggregationBuilders.avg("balanceAvg").field("balance");

        searchSourceBuilder.aggregation(balanceAvg);
        searchRequest.source(searchSourceBuilder);
        //执行检索
        SearchResponse search = client.search(searchRequest, GulimallElasticSearchCongfig.COMMON_OPIONS);
        //分析结果
        //可以把结果转为map  但是会很麻烦
//        Map map = JSON.parseObject(searchRequest.toString(), Map.class);
        //3.1获取所有查到的数据
        //这个hits是最大最外层的hits
        SearchHits hits = search.getHits();
        //从hits中继续get
        SearchHit[] hitsHits = hits.getHits();
        for (SearchHit hitsHit : hitsHits) {
//            hitsHit.getIndex();
//            hitsHit.getType();
//            hitsHit.getId();
            String sourceAsString = hitsHit.getSourceAsString();
            //利用fastJson把得到结果通过实体类转成对象进行一一映射
            Accout accout = JSON.parseObject(sourceAsString, Accout.class);
            System.out.println(accout);
        }
        //获取这次检索得到的分析信息 分析当前聚合
        Aggregations aggregations = search.getAggregations();
//        for (Aggregation aggregation : aggregations.asList()) {
//            System.out.println("当前聚合"+aggregation.getName());
//        }

        Terms ageAgg1 = aggregations.get("ageAgg");
        for (Terms.Bucket bucket : ageAgg1.getBuckets()) {
            String keyAsString = bucket.getKeyAsString();
            System.out.println("年龄" + keyAsString+"几个人:"+bucket.getDocCount());
        }
        Avg balanceAvg1 = aggregations.get("balanceAvg");
        System.out.println("平均薪资:" + balanceAvg1.getValue());
    }

运行后可以看到查到内容

如果想要测试数据可以看博主第一个博客,里面有json数据连接

 

这两个地方为什么不是idea自动帮我么能找到的数据类型 Aggregation呢,我们点进去可以看到这个是一个接口,ctrl+h可以看见其所有关系

 这个是他所有的类型,也同样是es的一些方法。所以对应的内容转换一下,就可以快捷得到其中的值。

 

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

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

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