es常用统计,使用RestHighLevelClient配置与使用elasticsearch--gradle


plugins {
    
    
    id 'org.springframework.boot' version '2.2.1.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
}

group 'com.ddddd'
version '1.0'
sourceCompatibility = 1.8

repositories {
    
    
    mavenLocal()
    maven {
    
     url 'http://maven.aliyun.com/nexus/content/repositories/central/' }
    mavenCentral()
}

dependencies {
    
    
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
//    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
    
    
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
//    compile group: 'org.elasticsearch', name: 'elasticsearch', version: '6.8.7'
//    compile group: 'org.elasticsearch.client', name: 'elasticsearch-rest-high-level-client', version: '6.8.7'
//    加载外部jar
//    compile files('lib/ojdbc6.jar')
//     去除内置tomcat
//    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}

test {
    
    
    useJUnitPlatform()
}

//application.yml
#spring:
#  data:
#    elasticsearch:
#      cluster-name: elasticsearch
#      cluster-nodes: 192.168.1.240:9300

logging.level.org.springframework.data.elasticsearch.client.WIRE: trace
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.RestClients;

@Configuration
public class EsConfig {
    
    
    @Bean
    RestHighLevelClient client() {
    
    
        ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo("192.168.1.240:9200")
                .build();

        return RestClients.create(clientConfiguration).rest();
    }

}
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;

@Document(indexName = "esdto", type = "testbean")
public class EsDto implements Serializable {
    
    

    public EsDto() {
    
    
    }

    public EsDto(long id, String name, Integer age, String sex, String desc) {
    
    
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.desc = desc;
    }

    // 必须指定一个id,
    @Id
    private long id;
    // 这里配置了分词器,字段类型,可以不配置,默认也可
    @Field(analyzer = "ik_smart", type = FieldType.Text)
    private String name;
    private Integer age;
    @Field(analyzer = "ik_smart", type = FieldType.Text)
    private String sex;
    @Field(analyzer = "ik_smart", type = FieldType.Text)
    private String desc;

    public long getId() {
    
    
        return id;
    }

    public void setId(long id) {
    
    
        this.id = id;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public Integer getAge() {
    
    
        return age;
    }

    public void setAge(Integer age) {
    
    
        this.age = age;
    }

    public String getSex() {
    
    
        return sex;
    }

    public void setSex(String sex) {
    
    
        this.sex = sex;
    }

    public String getDesc() {
    
    
        return desc;
    }

    public void setDesc(String desc) {
    
    
        this.desc = desc;
    }
}
import org.springframework.data.repository.CrudRepository;

import java.util.List;

public interface EsRepo extends CrudRepository<EsDto, Long> {
    
    
    List<EsDto> findByName(String name);

    List<EsDto> findByNameOrDesc(String text, String desc);
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

@Service
public class EsService {
    
    

    @Autowired
    EsRepo testDao;

    public Iterable<EsDto> findAll() {
    
    

        return testDao.findAll();
    }


    public void save() {
    
    
        List<EsDto> list = new ArrayList<>();

        String namess = "帆乘   楷栋   锋枫   海勇   康帆   安礼   晓平   良帆   瑞翱   涛锟   恒勇   鸿驰   帆强   桓柏   锋寅   博槐   骞琛   桓钊   杰桓   裕枫   福晖   槐仕   奇鹏   骏伟   允潍   乘初   杞郁   柏安   皓宇   骏侠   礼德   哲晓   伟权   祥恒   澄震   浩浩   瑞权   延升   翱楷   锋轩   驰鹏   杞翱   康鹤   材福   晖锐   信恒   凯锦   诚翱   震福   龙宇   祥帆   梓瑞   林龙   日延   槐翰   日寅   起鸿   杞允   瑞锐   仕星   权铭   吉楷   寅星   林帝   皓仕   卓礼   家盛   海寅   盛胤   年禧   畅安   炳龙   柏晖   诚年   彬坤   礼诚   濡凯   驰晨   恒邦   帆晖   诚华   晖星   恒梓   禄彬   鹤华   锟升   桓浩   振尧   祥寅   楷辰   暄帝   锐梓   恒佑   文安   杰畅   加琛   俊泽   乘驰   禄家   中鹤   家锦   皓初   凯震   文韦   彬澄   起哲   海炳   鹤锋   贤逸   哲佑   海信   逸俊   炳年   礼郁   濡寅   晓泽   然延   喆加   天梓   泽锟   轩谛   盛翱   晨子   诚吉   梁鹤   仕逸   升平   奇琛   杞沛   胤邦   辰佑   骞佳   鸿鹏   翱坤   钊峰   哲锐   腾鑫   海阳   烁奇   安芃   浩瑞   星尧   驰炳   安沛   权成   华文   杞晨   柏柔   权彬   祯晨   谛潍   驰安   安日   谷沛   帆华   林翰   然震   琛星   泽杞   澄涛   龙欣   嘉辰   海禄   诚家   帆韦   澄濡   潍延   郁邦   锐礼   蔓材   畅震   腾诚   峰贤   轩潍   凡信   翱年   祜帆   睿吉   祯博   强延   震鑫   邦郁   禧祯   良梁   烁谛   成震   翱颜   加升   荣俊   晨骞   锦槐   烁安   鑫平   沛凯   德升   炳宇   远侠   晖鹏   腾谷   初帆   林然   中禄   斌颜   颜浩   远帆   胤然   祜沛   允锟   畅梁   栋材   泽柔   远锐   杞梁   凯濡   郁槐   家泽   暄乘   年权   文柏   潍禧   澄禧   奇锦   逸然   翰弘   华海   柏辞   瑞星   胤佑   芃嘉   祜胤   逸杰   杰逸   材龙   允升   加韦   逸福   桓辞   枫濡   信然   栋祯" +
                "蓓菡   娜嘉   碧珊   菲昕   芸帆   怡莉   鸿莲   曦静   灵玥   橘婧   家曼   鹤丽   岚琳   格梅   呈梦   璇嘉   月欣   楠敏   瑶丽   茹莲   杉歆   帆珍   琬彬   蓓昭   函璇   凌欢   歆蔚   妮萱   琛灵   婷媛   琳凌   岚冬   静鸿   珍倩   桂枫   玉岚   紫涵   桃婧   芳璟   韵珠   香萱   冰梅   桂寒   呈曼   梅茹   雯帆   芙明   紫桂   霞玲   蓓莉   霞可   琪香   菲春   美俊   梦栀   鹤婧   帛菲   静芝   琳沛   玥薇   璟漫   弦茹   彦茜   花梓   歆曦   寒洁   莉梓   颖芙   梓露   玉诗   桃橘   鹤霞   沛漫   月婧   玲阳   雅欢   珍月   璟紫   歆淑   韵琬   月玉   欢彦   寒娅   妍彤   梦萱   蕾芳   心彤   彩妮   寒玲   淑漫   茜桐   春楠   洲茜   月嘉   欣云   珠香   岚韵   娜呈   妮弦   芸函   芳寒   萱林   云琳   莲菡   碧娅   莉凌   栀茜   蔚妮   惠婧   香心   初莉   颖淑   凡芝   璇灵   可蕾   静文   彩鹤   芙鑫   花楠   云梦   菲茹   蓓玥   惠娅   凌芳   柔旭   琛楠   雪娜   蕾诗   芸珠   菡桂   蕾文   桃花   彩诗   彬洁   帆馨   雯春   芝韵   春雅   静紫   寒橘   冰淑   韵露   昭莲   诗晨   钰花   彩月   昕欢   香可   菲婧   橘静   钰韵   霞心   彬雅   芙春   菲惠   萱曦   惠枫   舒薇   楠丽   栀珍   琳惠   歆冬   漫月   莲琛   琬梓   雨美   梦家   倩慧   俊薇   彬璇   敏玉   栀曼   曦倩   蓓蔚   月茜   俊珍   茹帆   璐欢   芝珊   昕舒   娅璐   慧玉   春玥   舒静   颖楠   淑紫   漫彩   欢曼   芳歆   桂冰   芙薇   旭雅   璇冰   岚欣   岚玲   慧锦   克霞   萱丽   采碧   洁昭   采彩   珊云   漫梦   萱凌   怡文   霞杉   敏怡   莉怡   怡露   格漫   瑶薇   沛菲   彦梦   妮馨   菲萱   敏桐   鹤菡   彬蓓   凌彤   珊莉   漫依   琪莲   欣霞   璟心   梅薇   寒蓓   倩梓   采娜   琬雯   枫梅   花格   馨可   杉璐   舒娅   沛香   颖茹   格玲   花柏   雨璟   欣薇";

        String[] names = namess.split("\\s+");

        String[] descArr = {
    
    "大家好,我是雨天,因为刚好出生在雨天,老爸又刚好姓夏,于是“下雨天”就首发出场了,而且妈妈也希望我如雨后春笋、天天向上哦!呵呵后来因为一部分人实在不忍心在晴朗的天气里叫我雨天,为避免引起“混乱”,就只好舍弃了这个颇有个性的简单名字,退而成“小名“了。我的大名也简单,其实就一个“翌”字,因为我出生的日子刚好是爸爸妈妈结婚2周年纪念日的第二日。“夏翌”谐音宁波话“暇意”,大家希望我暇暇意意,呵呵,有点嫌”翌”字太文绉绉,就把它给拆了,一分为二成羽立了。"
                , "大家都说我是个阳光女孩,因为我是开心果啊。我老是坐不住,呵呵,能跟小椅子成为好朋友,是老师和爸爸妈妈现在的最大心愿。我喜欢跳舞,但最好能跟着音乐自己起舞,不用按老师的要求练基本功;我喜欢画画,但最好是信手涂鸦,把小朋友的脸画成绿色也没关系;我喜欢溜冰,但最有趣的还是约上三五好友,一起练习如何摔跤……"
                , "昀昀是我在妈妈肚子里时的小名哦,我的大名叫曹铁瀛,妈妈怀我的时候和单位里的阿姨们玩牌经常是百战百胜,阿姨们说是因为我的缘故,干脆就叫“天赢”好了,爸妈取其谐音,就变成了“铁瀛”"
                , "嘿!我——21号来报到了!智诰、诰诰、阿诰,你们爱怎么叫就怎么叫吧!反正都是我!我的名字是奶奶请一名先生取的,虽然有点迷信,但寄托了全家人的祝福!"
                , "还是汽车发烧友,小轿车、大卡车、集装箱、大客车、翻斗车、压路机……应有尽有(就差拖拉机还没有报到)。我常在家练习倒车、移库、爬坡、过单轨桥,考取驾照不成问题!!当然我也模拟制造几起车祸,掉进大河,深沟,追尾事故,因为那时我又能大显身手,汽车的零件装了又拆,拆了又装……哈哈!!角角落落都是我的杰作,缺胳膊少腿的,七零八落的,尽管汽车多,可完完整整的没几辆!这下,又有理由去买车啦!"
                , "我还喜欢画画。从小我就拿着笔画一个个的大圆圈,每天乐此不疲,整整画了半年多圆圈呢!够有毅力的吧!老师说我构图线条流畅,就是那样练出来的哦!以后我一定会继续努力的!可是我不太喜欢看书,妈妈让我看书,我老是心不在焉,左顾右盼,常常惹她不高兴,可我就是不喜欢嘛!"
                , "我的性格有点内向、腼腆、不喜欢“显山露水”。我最喜欢体育项目了,最“痴迷”的就是体育频道:乒乓球、羽毛球、台球、足球、篮球、跳水~~,当然我也喜欢打牌(这可是遗传)。"
                , "我的个子很高,被称为“帅哥”,因此彼得女孩子的欢心哦,等我长大了,我要娶七个“老婆”,其中三个为:外婆、爸爸和妈妈。 我的目标是考上北大。\n"
                , "我当时的第一反应是:这两个字可以跟名人的名字做一个联系,然后做一个介绍。我说你介绍的时候可以跟别人讲:"
        };

        Random random = new Random();

        //模拟数据
        for (int i = 0; i < 100; i++) {
    
    
            int i1 = random.nextInt(names.length);
            int i2 = random.nextInt(descArr.length);
            //注意这里 第一个参数是id 所以无论你运行多少次,都只会添加100条数据,如果id存在es更新,不存在添加
            EsDto testBean = new EsDto(i, names[i1], i, String.valueOf(i % 2), descArr[i2]);

            list.add(testBean);
        }

        testDao.saveAll(list);
    }


    public void save(EsDto bean) {
    
    
        testDao.save(bean);
    }


    public List<EsDto> findByName(String text) {
    
    
        return testDao.findByName(text);
    }


    public List<EsDto> findByNameOrDesc(String text) {
    
    
        return testDao.findByNameOrDesc(text,text);
    }

}

test执行

import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.CountRequest;
import org.elasticsearch.client.core.CountResponse;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;

import java.io.IOException;
import java.util.List;

import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
class SpringTest {
    
    

    @Autowired
    private EsService esService;
    @Autowired
    private RestHighLevelClient client;

    @Test
    void hi() {
    
    
        Iterable<EsDto> itr = esService.findAll();
        itr.forEach(o-> System.out.println(o.getName()));

    }

    @Test
    void dd2(){
    
    
        esService.save();
    }

    @Test
    void dd3(){
    
    
        List<EsDto> res = esService.findByName("心");
        res.forEach(o-> System.out.println(o.getName()));
    }

    @Test
    void dd4(){
    
    
        CountRequest countRequest = new CountRequest("esdto");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.matchAllQuery());
        countRequest.source(searchSourceBuilder);

        try {
    
    
            CountResponse countResponse = client.count(countRequest, RequestOptions.DEFAULT);
            System.out.println(countResponse.getCount());
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }
}
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;
import java.util.Arrays;

import static org.junit.jupiter.api.Assertions.*;

/**
 * https://www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high-get-index.html
 */
@SpringBootTest
public class EsTest {
    
    
    @Autowired
    RestHighLevelClient client;

    // 检测es 活着
    @Test
    void ping(){
    
    
        try {
    
    
            assertEquals("true",client.ping(RequestOptions.DEFAULT));
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }

    @Test
    void listIndex() throws Exception{
    
    
        GetIndexRequest request = new GetIndexRequest("*");
        GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);
        String[] indices = response.getIndices();
        System.out.println(Arrays.toString(indices));
    }

    @Test
    void delIndex() throws Exception{
    
    
        DeleteIndexRequest request = new DeleteIndexRequest("esdto");
        AcknowledgedResponse deleteIndexResponse = client.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(deleteIndexResponse.isAcknowledged());

    }
}

常用es统计写法

import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.CountRequest;
import org.elasticsearch.client.core.CountResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;

import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.aggregations.metrics.sum.Sum;
import org.elasticsearch.search.aggregations.metrics.sum.SumAggregationBuilder;
import org.elasticsearch.search.aggregations.metrics.sum.SumAggregator;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import static org.junit.jupiter.api.Assertions.*;

/**
 * https://www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high-get-index.html
 */
@SpringBootTest
public class EsTest {
    
    
    @Autowired
    RestHighLevelClient client;

    // 检测es 活着
    @Test
    void ping(){
    
    
        try {
    
    
            assertEquals("true",client.ping(RequestOptions.DEFAULT));
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }

    @Test
    void listIndex() throws Exception{
    
    
        GetIndexRequest request = new GetIndexRequest("*");
        GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);
        String[] indices = response.getIndices();
        System.out.println(Arrays.toString(indices));
    }

    @Test
    void delIndex() throws Exception{
    
    
        DeleteIndexRequest request = new DeleteIndexRequest("acttake");
        AcknowledgedResponse deleteIndexResponse = client.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(deleteIndexResponse.isAcknowledged());

    }

    @Test
    void search() throws Exception{
    
    
        CountRequest countRequest = new CountRequest("acttake");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        // 总数
//        searchSourceBuilder.query(QueryBuilders.matchAllQuery());

        // 两个条件都要满足
//        BoolQueryBuilder query = QueryBuilders.boolQuery()
//                .must(QueryBuilders.matchQuery("status",100))
//                .must(QueryBuilders.matchQuery("lastThreeOrgNo","440778008"));
//        searchSourceBuilder.query(query);

        // 时间区间,date存入es为long,使用时间戳*1000
//        BoolQueryBuilder query = QueryBuilders.boolQuery()
//                .must(QueryBuilders.rangeQuery("takeDate").gt(1568777356000L).lt(1568777358000L));
//        searchSourceBuilder.query(query);



        countRequest.source(searchSourceBuilder);
        CountResponse countResponse = client.count(countRequest, RequestOptions.DEFAULT);
        long count = countResponse.getCount();
        System.out.println(count);
    }

    @Test
    void search2() throws Exception{
    
    
        SearchRequest searchRequest = new SearchRequest("acttake");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        searchSourceBuilder.query(QueryBuilders.matchAllQuery()).from(100).size(100).sort("id", SortOrder.DESC);

        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
        System.out.println(hits.totalHits); //总数
        SearchHit[] searchHits = hits.getHits();
        for (SearchHit hit : searchHits) {
    
    
            System.out.println(hit);
        }
    }

    @Test
    void search3() throws Exception{
    
    
        SearchRequest searchRequest = new SearchRequest("acttake");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        // 过滤数据 where,size 0不返回数据,只要统计
        searchSourceBuilder.query(QueryBuilders.matchAllQuery()).size(0);

        // 对上面过滤后的数据,group by 分组统计,如果是字符,用.keyword 数字不加
//        TermsAggregationBuilder groupBy = AggregationBuilders.terms("org1").field("lastFirstOrgNo.keyword")
//                             .order(BucketOrder.compound(BucketOrder.count(false))); // 对group后的排序
//        searchSourceBuilder.aggregation(groupBy);

        // group by 2个字段
        TermsAggregationBuilder groupByOrg2 = AggregationBuilders.terms("org2").field("lastSecondOrgNo.keyword");
        TermsAggregationBuilder groupByOrg1 = AggregationBuilders.terms("org1").field("lastFirstOrgNo.keyword").subAggregation(groupByOrg2);
        searchSourceBuilder.aggregation(groupByOrg1);

        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
        System.out.println(hits.totalHits); //总数

        Terms terms = searchResponse.getAggregations().get("org1");
        List<? extends Terms.Bucket> buckets = terms.getBuckets();
        for (Terms.Bucket bucket : buckets) {
    
    
            Terms terms2 = bucket.getAggregations().get("org2");
            List<? extends Terms.Bucket> buckets2 = terms2.getBuckets();
            for (Terms.Bucket bucket2 : buckets2) {
    
    
                System.out.println(bucket.getKey()+" "+  bucket2.getKey() +" ("+bucket2.getDocCount()+")");
            }
        }
    }

    @Test
    void search4() throws Exception{
    
    
        SearchRequest searchRequest = new SearchRequest("acttake");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        // 过滤数据 where,size 0不返回数据,只要统计
        searchSourceBuilder.query(QueryBuilders.matchAllQuery()).size(0);

        // 对上面过滤后的数据,字段求和
        SumAggregationBuilder productSum = AggregationBuilders.sum("product").field("productNum");
        searchSourceBuilder.aggregation(productSum);

        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
//        System.out.println(hits.totalHits); //总数

        Sum sum = searchResponse.getAggregations().get("product");
        System.out.println(sum.value());

    }
}

猜你喜欢

转载自blog.csdn.net/c5113620/article/details/104922608