最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java操作ElasticSearch聚合查詢的示例代碼

 更新時(shí)間:2024年08月02日 10:23:12   作者:諸葛博仌  
這篇文章主要介紹了java操作ElasticSearch聚合查詢的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧

1、引入依賴

<!-- es工具-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>

2、配置es連接信息

sring:
  elasticsearch:
    rest:
      uris: "http://localhost:9200"

3、構(gòu)建索引

@Document(indexName = "test_index_person")
public class TestPerson{
    public TestPerson( String personName, Integer personId, String gmtCreate, String gmtModified) {
        this.personName = personName;
        this.personId = personId;
        this.gmtCreate = gmtCreate;
        this.gmtModified = gmtModified;
    }
    public TestPerson() {
    }
    @Override
    public String toString() {
        return "TestPerson{" +
                "id='" + id + '\'' +
                ", personName='" + personName + '\'' +
                ", personId=" + personId +
                ", gmtCreate=" + gmtCreate +
                ", gmtModified=" + gmtModified +
                '}';
    }
    @Id
    private String id;
    @Field(type = FieldType.Text, analyzer = "ik_analyzer",name = "person_name")
    private String personName;
    @Field(type = FieldType.Integer,name = "person_id")
    private Integer personId;
    @Field(type = FieldType.Date,name = "gmt_create")
    private String gmtCreate;
    @Field(type = FieldType.Date,name = "gmt_modified")
    private String gmtModified;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPersonName() {
        return personName;
    }
    public void setPersonName(String personName) {
        this.personName = personName;
    }
    public Integer getPersonId() {
        return personId;
    }
    public void setPersonId(Integer personId) {
        this.personId = personId;
    }
    public String getGmtCreate() {
        return gmtCreate;
    }
    public void setGmtCreate(String gmtCreate) {
        this.gmtCreate = gmtCreate;
    }
    public String getGmtModified() {
        return gmtModified;
    }
    public void setGmtModified(String gmtModified) {
        this.gmtModified = gmtModified;
    }
}

4、查詢(包含自定義聚合查詢)

    @Autowired
    ElasticsearchOperations elasticsearchOperations;
    /***
     * 自定義 match 查詢
     */
    @Test
    public void test6(){
        // 構(gòu)建查詢條件
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 添加基本分詞查詢
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("person_name", "小黑子");
        queryBuilder.withQuery(matchQueryBuilder);
        SearchHits<TestPerson> searchHits = elasticsearchOperations.search(queryBuilder.build(), TestPerson.class);
        searchHits.forEach(item ->{
            System.out.println(item);
        });
    }
    /***
     * 自定義 term 查詢
     */
    @Test
    public void test7(){
        // 構(gòu)建查詢條件
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 添加基本分詞查詢
        TermQueryBuilder personId = QueryBuilders.termQuery("person_id", "1");
        queryBuilder.withQuery(personId);
        SearchHits<TestPerson> searchHits = elasticsearchOperations.search(queryBuilder.build(), TestPerson.class);
        searchHits.forEach(item ->{
            System.out.println(item);
        });
    }
    /***
     * 自定義 match_all 查詢
     */
    @Test
    public void test8(){
        // 構(gòu)建查詢條件
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 添加基本分詞查詢
        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
        queryBuilder.withQuery(matchAllQueryBuilder);
        SearchHits<TestPerson> searchHits = elasticsearchOperations.search(queryBuilder.build(), TestPerson.class);
        searchHits.forEach(item ->{
            System.out.println(item);
        });
    }
    /***
     * 自定義 match_phrase 查詢
     */
    @Test
    public void test9(){
        // 構(gòu)建查詢條件
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 添加基本分詞查詢
        MatchPhraseQueryBuilder matchPhraseQueryBuilder = QueryBuilders.matchPhraseQuery("person_name", "小黑子");
        queryBuilder.withQuery(matchPhraseQueryBuilder);
        SearchHits<TestPerson> searchHits = elasticsearchOperations.search(queryBuilder.build(), TestPerson.class);
        searchHits.forEach(item ->{
            System.out.println(item);
        });
    }
    /***
     * 范圍查詢
     */
    @Test
    public void test10(){
        // 構(gòu)建查詢條件
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 添加基本分詞查詢
        RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("gmt_create");
        rangeQuery.gte("2024-01-31T11:00:00");
        rangeQuery.lt("2024-07-31T11:00:00");
        queryBuilder.withQuery(rangeQuery);
        SearchHits<TestPerson> searchHits = elasticsearchOperations.search(queryBuilder.build(), TestPerson.class);
        searchHits.forEach(item ->{
            System.out.println(item);
        });
    }
    /***
     * 模糊匹配
     */
    @Test
    public void test11(){
        // 構(gòu)建查詢條件
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 添加基本分詞查詢
        FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("person_name", "張三");
        queryBuilder.withQuery(fuzzyQueryBuilder);
        SearchHits<TestPerson> searchHits = elasticsearchOperations.search(queryBuilder.build(), TestPerson.class);
        searchHits.forEach(item ->{
            System.out.println(item);
        });
    }
    /***
     * 布爾查詢 必須匹配(must) 過濾(filter) 至少匹配一個(gè)(should)
     */
    @Test
    public void test12(){
        // 構(gòu)建查詢條件
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 構(gòu)建布爾查詢
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        //布爾查詢下添加must
        List<QueryBuilder> must = boolQueryBuilder.must();
        TermQueryBuilder personId = QueryBuilders.termQuery("person_id", "1");
        must.add(personId);
        //布爾查詢下添加filter
        List<QueryBuilder> filter = boolQueryBuilder.filter();
        RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("gmt_create");
        rangeQuery.gte("2024-07-31T10:00:00");
        filter.add(rangeQuery);
       //布爾查詢下添加should
        List<QueryBuilder> should = boolQueryBuilder.should();
        TermQueryBuilder shouldTerm = QueryBuilders.termQuery("person_id", "111");
        should.add(shouldTerm);
        //布爾查詢下添加must_not
        List<QueryBuilder> queryBuilders = boolQueryBuilder.mustNot();
        TermQueryBuilder mustNotTerm = QueryBuilders.termQuery("person_name", "哈哈哈");
        queryBuilders.add(mustNotTerm);
        //構(gòu)建布爾查詢語法,準(zhǔn)備執(zhí)行
        queryBuilder.withQuery(boolQueryBuilder);
        SearchHits<TestPerson> searchHits = elasticsearchOperations.search(queryBuilder.build(), TestPerson.class);
        searchHits.forEach(item ->{
            System.out.println(item);
        });
    }
    /***
     * 分頁(yè)
     */
    @Test
    public void test13(){
        // 構(gòu)建查詢條件
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 查詢?nèi)?
        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
        queryBuilder.withQuery(matchAllQueryBuilder);
        Pageable pageable = PageRequest.of(0, 10, Sort.by("personId").descending());
        queryBuilder.withPageable(pageable);
        SearchHits<TestPerson> searchHits = elasticsearchOperations.search(queryBuilder.build(), TestPerson.class);
        searchHits.forEach(item ->{
            System.out.println(item);
        });
    }
    /***
     * 對(duì)查詢出來的值進(jìn)行聚合查詢 統(tǒng)計(jì)每個(gè)唯一值的個(gè)數(shù)
     */
    @Test
    public void test14(){
        // 構(gòu)建查詢條件
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        //查詢數(shù)據(jù)
        MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("person_name", "張三");
        queryBuilder.withQuery(matchQuery);
        //聚合數(shù)據(jù)
        TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("test_aggs").field("gmt_create");
        queryBuilder.addAggregation(termsAggregationBuilder);
        SearchHits<TestPerson> searchHits = elasticsearchOperations.search(queryBuilder.build(), TestPerson.class);
        searchHits.forEach(item ->{
            System.out.println(item);
        });
        Aggregations aggregations = searchHits.getAggregations();
        // 檢查 aggregations 是否為 null
        if (aggregations != null) {
            // 第二步:通過聚合名稱獲取特定的聚合結(jié)果
            Terms testAggs = aggregations.get("test_aggs");
            // 檢查特定聚合是否存在
            if (testAggs != null) {
                // 第三步:遍歷聚合中的桶(buckets)
                for (Terms.Bucket bucket : testAggs.getBuckets()) {
                    // 獲取桶的鍵(在這個(gè)例子中是 gmt_create 的值)
                    String keyAsString = bucket.getKeyAsString();
                    // 獲取桶中文檔的數(shù)量
                    long docCount = bucket.getDocCount();
                    // 打印或處理每個(gè)桶的結(jié)果
                    System.out.println("Key: " + keyAsString + ", DocCount: " + docCount);
                }
            }
        }
    }
    /***
     * 對(duì)查詢出來的值進(jìn)行聚合查詢 統(tǒng)計(jì)每個(gè)唯一值的個(gè)數(shù)  僅僅返回聚合結(jié)果
     */
    @Test
    public void test15(){
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        //僅僅返回聚合結(jié)果
        queryBuilder.withPageable(PageRequest.of(0,1));
        //查詢數(shù)據(jù)
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("person_name", "張三");
        queryBuilder.withQuery(matchQueryBuilder);
        //聚合
        TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("test_aggs").field("gmt_create");
        queryBuilder.addAggregation(aggregationBuilder);
        //獲取聚合信息
        SearchHits<TestPerson> search = elasticsearchOperations.search(queryBuilder.build(), TestPerson.class);
        Aggregations aggregations = search.getAggregations();
        if (aggregations != null){
            Terms terms = aggregations.get("test_aggs");
            List<? extends Terms.Bucket> buckets = terms.getBuckets();
            buckets.forEach(item ->{
                System.out.println("key:"+item.getKeyAsString()  +"===="+"doc_count:"+item.getDocCount());
            });
        }
    }
    /***
     * 多個(gè)聚合
     */
    @Test
    public void test16(){
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        //僅僅返回聚合結(jié)果
        queryBuilder.withPageable(PageRequest.of(0,1));
        TermsAggregationBuilder test_aggs = AggregationBuilders.terms("test_aggs").field("gmt_create");
        queryBuilder.addAggregation(test_aggs);
        AvgAggregationBuilder test_aggs2 = AggregationBuilders.avg("test_aggs2").field("person_id");
        queryBuilder.addAggregation(test_aggs2);
        SearchHits<TestPerson> search = elasticsearchOperations.search(queryBuilder.build(), TestPerson.class);
        Aggregations aggregations = search.getAggregations();
        if (aggregations != null){
            Terms test_aggs1 = aggregations.get("test_aggs");
            if (test_aggs != null){
                test_aggs1.getBuckets().forEach(item ->{
                    System.out.println("key:"+ item.getKeyAsString()+"===="+"doc_count:"+item.getDocCount());
                });
            }
            Avg test2_aggs = aggregations.get("test_aggs2");
            System.out.println( test2_aggs.getValue());
        }
    }
    /***
     * 子聚合 先分組,再計(jì)算
     */
    @Test
    public void test17(){
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        queryBuilder.withPageable(PageRequest.of(0,1));
        TermsAggregationBuilder test_aggs = AggregationBuilders.terms("test_aggs").field("gmt_create");
        test_aggs.subAggregation(AggregationBuilders.avg("son_aggs_test").field("person_id"));
        queryBuilder.addAggregation(test_aggs);
        SearchHits<TestPerson> search = elasticsearchOperations.search(queryBuilder.build(), TestPerson.class);
        Aggregations aggregations = search.getAggregations();
        Terms testAgges =  aggregations.get("test_aggs");
        testAgges.getBuckets().forEach(item ->{
            Avg aggregations1 = item.getAggregations().get("son_aggs_test");
            System.out.println("key:"+item.getKeyAsString()+"--doc_count:"+item.getKeyAsString()+"--son_aggs_test"+aggregations1.getValue());
        });
    }
    /**
     * 取聚合最大值
     */
    @Test
    public void test18(){
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        queryBuilder.addAggregation(AggregationBuilders.max("test_agg").field("person_id"));
        SearchHits<TestPerson> search = elasticsearchOperations.search(queryBuilder.build(), TestPerson.class);
        Aggregations aggregations = search.getAggregations();
        Max test_agg = aggregations.get("test_agg");
        System.out.println(test_agg.getValue());
    }

到此這篇關(guān)于java操作ElasticSearch(包含聚合查詢)的文章就介紹到這了,更多相關(guān)java操作ElasticSearch內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java json字符串轉(zhuǎn)JSONObject和JSONArray以及取值的實(shí)例

    java json字符串轉(zhuǎn)JSONObject和JSONArray以及取值的實(shí)例

    這篇文章主要介紹了java json字符串轉(zhuǎn)JSONObject和JSONArray以及取值的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 史上最全的IDEA快捷鍵總結(jié)

    史上最全的IDEA快捷鍵總結(jié)

    這篇文章主要介紹了史上最全的IDEA快捷鍵總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Spring中使用AOP進(jìn)行事務(wù)管理實(shí)例

    Spring中使用AOP進(jìn)行事務(wù)管理實(shí)例

    這篇文章主要介紹了Spring中使用AOP進(jìn)行事務(wù)管理實(shí)例,當(dāng)在Spring項(xiàng)目中涉及數(shù)據(jù)庫(kù)操作時(shí),事務(wù)管理是非常重要的,它可以確保數(shù)據(jù)庫(kù)操作的一致性和完整性,Spring提供了強(qiáng)大的事務(wù)管理功能,可以通過聲明式或編程式兩種方式進(jìn)行配置,需要的朋友可以參考下
    2023-09-09
  • java根據(jù)ip地址獲取詳細(xì)地域信息的方法

    java根據(jù)ip地址獲取詳細(xì)地域信息的方法

    這篇文章主要介紹了java根據(jù)ip地址獲取詳細(xì)地域信息的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • JAVA如何把數(shù)據(jù)庫(kù)的數(shù)據(jù)處理成樹形結(jié)構(gòu)

    JAVA如何把數(shù)據(jù)庫(kù)的數(shù)據(jù)處理成樹形結(jié)構(gòu)

    本文介紹了JAVA如何把數(shù)據(jù)庫(kù)的數(shù)據(jù)處理成樹形結(jié)構(gòu),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 基于Java編寫一個(gè)簡(jiǎn)單的內(nèi)部網(wǎng)段掃描程序

    基于Java編寫一個(gè)簡(jiǎn)單的內(nèi)部網(wǎng)段掃描程序

    這篇文章主要為大家詳細(xì)介紹了如何基于Java編寫一個(gè)簡(jiǎn)單的內(nèi)部網(wǎng)段掃描程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解下
    2025-02-02
  • 解決一個(gè)JSON反序列化問題的辦法(空字符串變?yōu)榭占?

    解決一個(gè)JSON反序列化問題的辦法(空字符串變?yōu)榭占?

    在平時(shí)的業(yè)務(wù)開發(fā)中,經(jīng)常會(huì)有拿到一串序列化后的字符串要來反序列化,下面這篇文章主要給大家介紹了如何解決一個(gè)JSON反序列化問題的相關(guān)資料,空字符串變?yōu)榭占?需要的朋友可以參考下
    2024-03-03
  • 關(guān)于泛型擦除問題的解決--Mybatis查詢類型轉(zhuǎn)換

    關(guān)于泛型擦除問題的解決--Mybatis查詢類型轉(zhuǎn)換

    這篇文章主要介紹了關(guān)于泛型擦除問題的解決--Mybatis查詢類型轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Java?Date類的使用方式(日期處理)

    Java?Date類的使用方式(日期處理)

    本文介紹了Java中的Date類和Calendar類的使用,詳細(xì)講解了Date類的構(gòu)造方法和常用方法,并通過一個(gè)實(shí)例演示了如何使用Date類來比較兩個(gè)時(shí)間點(diǎn)之間的關(guān)系
    2024-11-11
  • Java?ClassLoader虛擬類實(shí)現(xiàn)代碼熱替換的示例代碼

    Java?ClassLoader虛擬類實(shí)現(xiàn)代碼熱替換的示例代碼

    本文主要介紹了Java?ClassLoader虛擬類實(shí)現(xiàn)代碼熱替換的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06

最新評(píng)論

新乐市| 山东省| 和田县| 静乐县| 桐庐县| 龙里县| 原平市| 西城区| 类乌齐县| 沙坪坝区| 吉木乃县| 互助| 永宁县| 托克逊县| 高清| 姚安县| 沾益县| 当涂县| 博客| 英德市| 嘉定区| 英超| 仲巴县| 呼伦贝尔市| 芦溪县| 冀州市| 饶平县| 霍城县| 常山县| 白水县| 和硕县| 临海市| 江门市| 稻城县| 手游| 奈曼旗| 长宁区| 莲花县| 卫辉市| 达日县| 平定县|