国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ES聚合查詢 基于RestHighLevelClient依賴 Java操作

這篇具有很好參考價值的文章主要介紹了ES聚合查詢 基于RestHighLevelClient依賴 Java操作。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、介紹 (偏自我理解)

? ? ? ? 1.ES聚合查詢通用流程

? ? ? ? ? ? ? ? 1.分組 ( 好比Mysql ---> group by )

? ? ? ? ? ? ? ? 2.組內(nèi)聚合 也叫 組內(nèi)指標( 好比Mysql ---> SUM()、COUNT()、AVG()、MAX()、MIN() )

? ? ? ? 2.桶(我要是es開發(fā)者,我起名叫啥都行)

? ? ? ? ? ? ? ? 1.滿足特定條件的文檔的集合,叫做桶。

???????????????????桶的就是一組數(shù)據(jù)的集合,對數(shù)據(jù)分組后,得到一組組的數(shù)據(jù),就是一個個的桶

         提示:桶等同于組,分桶和分組是一個意思,ES使用桶代表一組相同特征的數(shù)據(jù)。

? ? ? ? 3.指標

? ? ? ? ? ? ? ? 1.指標指的是對文檔進行統(tǒng)計計算方式,又叫指標聚合。

? ? ? ? ? ? ? ? 2.強大之處就是,前面將數(shù)據(jù)經(jīng)過一輪桶聚合,把數(shù)據(jù)分成一個個的桶之后,我們根據(jù)上面計算指標對桶內(nèi)的數(shù)據(jù)進行統(tǒng)計。

{
  "aggregations" : {
    "<aggregation_name>" : {
        "<aggregation_type>" : {
            <aggregation_body>
        }
        [,"aggregations" : { [<sub_aggregation>]+ } ]? // 嵌套聚合查詢,支持多層嵌套
    }
    [,"<aggregation_name_2>" : { ... } ]* // 多個聚合查詢,每個聚合查詢?nèi)〔煌拿?  }
}

說明:
1)aggregations - 代表聚合查詢語句,可以簡寫為aggs

2)<aggregation_name> - 代表一個聚合計算的名字,可以隨意命名,因為ES支持一次進行多次統(tǒng)計分析查詢,后面需要通過這個名字在查詢結(jié)果中找到我們想要的計算結(jié)果。

3)<aggregation_type> - 聚合類型,代表我們想要怎么統(tǒng)計數(shù)據(jù),主要有兩大類聚合類型,桶聚合和指標聚合,這兩類聚合又包括多種聚合類型,例如:指標聚合:sum、avg, 桶聚合:terms、Date histogram等等。

4)<aggregation_body> - 聚合類型的參數(shù),選擇不同的聚合類型,有不同的參數(shù)。

5)aggregation_name_2 - 代表其他聚合計算的名字,意思就是可以一次進行多種類型的統(tǒng)計。

————————————————
版權(quán)聲明:本文為CSDN博主「書蟲罷了」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lazyboy2/article/details/125122815

? ? ? ? 4.舉例說明

下面看個簡單的聚合查詢的例子:

假設(shè)存在一個order索引,存儲了每一筆汽車銷售訂單,里面包含了汽車顏色字段color.

GET /order/_search
{
    "size" : 0, // 設(shè)置size=0的意思就是,僅返回聚合查詢結(jié)果,不返回普通query查詢結(jié)果。
    "aggs" : { // 聚合查詢語句的簡寫
        "popular_colors" : { // 給聚合查詢?nèi)€名字,叫popular_colors
            "terms" : { // 聚合類型為,terms,terms是桶聚合的一種,類似SQL的group by的作用,根據(jù)字段分組,相同字段值的文檔分為一組。
              "field" : "color" // terms聚合類型的參數(shù),這里需要設(shè)置分組的字段為color,根據(jù)color分組
            }
        }
    }
}

上面使用了terms桶聚合,而且沒有明確指定指標聚合函數(shù),默認使用的是Value Count聚合指標統(tǒng)計文檔總數(shù), 整個統(tǒng)計的意思是統(tǒng)計每一種汽車顏色的銷量。

{
...
   "hits": { // 因為size=0,所以query查詢結(jié)果為空
      "hits": [] 
   },
   "aggregations": { // 聚合查詢結(jié)果
      "popular_colors": { // 這個就是popular_colors聚合查詢的結(jié)果,這就是為什么需要給聚合查詢?nèi)€名字的原因,如果有多個聚合查詢,可以通過名字查找結(jié)果
         "buckets": [ // 因為是桶聚合,所以看到返回一個buckets數(shù)組,代表分組的統(tǒng)計情況,下面可以看到每一種顏色的銷量情況
            {
               "key": "red", 
               "doc_count": 4 // 紅色的汽車銷量為4
            },
            {
               "key": "blue",
               "doc_count": 2
            },
            {
               "key": "green",
               "doc_count": 2
            }
         ]
      }
   }
}

? ? ? ? 5.常用方法

常用的統(tǒng)計函數(shù)如下:

  • Value Count - 類似sql的count函數(shù),統(tǒng)計總數(shù)
  • Cardinality - 類似SQL的count(DISTINCT 字段), 統(tǒng)計不重復的數(shù)據(jù)總數(shù)
  • Avg - 求平均值
  • Sum - 求和
  • Max - 求最大值
  • Min - 求最小值

? ? ? ? 4.上貨 (需求:用戶搜索熱詞檢索出搜索最多的Top10)

1.首先檢索熱詞,用戶在input框輸入的時候,每點查詢,數(shù)據(jù)的信息都需要入庫,好在咱們es中統(tǒng)計熱詞

2.插入就不展示了,就說說簡單的熱詞如何分組排序顯示。

3.Kibana操作

//先分組看結(jié)果 這很關(guān)鍵 是思想的提示
GET XXXXXX/_search
{
  "size": 0,
  "aggs": {
    "order_by_word": { //起的別名
      "terms": {
        "field": "word",
        "size": 10
      }
    }
  }
}

//結(jié)果展示
{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 3,
    "successful" : 3,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 69,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "order_by_word" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 5,
      "buckets" : [ //buckets 桶 下面都是一個桶內(nèi)不同類型的分桶
        {
          "key" : "寶馬",
          "doc_count" : 19 //這就是上面說的默認是Value_count自動聚合分組后的各數(shù)量
        },                   我們就是根據(jù)這個數(shù)量分組后再來排序的不過默認這個關(guān)鍵字為"_count"
        {                
          "key" : "奧迪",
          "doc_count" : 18
        },
        {
          "key" : "奔馳",
          "doc_count" : 16
        },
        {
          "key" : "謳歌",
          "doc_count" : 3
        },
        {
          "key" : "蘭博基尼",
          "doc_count" : 2
        },
        {
          "key" : "凱迪拉克",
          "doc_count" : 2
        },
        {
          "key" : "雷克薩斯",
          "doc_count" : 1
        },
        {
          "key" : "雅迪電動車",
          "doc_count" : 1
        },
        {
          "key" : "追風鳥電動車",
          "doc_count" : 1
        },
        {
          "key" : "艾瑪電動車",
          "doc_count" : 1
        }
      ]
    }
  }
}
GET lhzz_hot_word/_search
{
  "size": 0,
  "aggs": {
    "order_by_word": {
      "terms": {
        "field": "word",
        "size": 10,
        "order": { //排序 結(jié)果和上面一樣 默認采用也是倒序 
          "_count": "desc"
        }
      }
    }
  }
}

????????我覺得這樣再看Java操作就很好理解了 ↓ ↓ ↓ ↓ ↓ ↓

4.Java操作

//搜索索引請求
SearchRequest searchRequest = new SearchRequest("XX_nb_hot_words");
//創(chuàng)建條件數(shù)據(jù)源
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//聚合查詢 top10熱詞
TermsAggregationBuilder field = AggregationBuilders.terms("order_by_word").field("word")
        //顯示滿足條件的前10條記錄
        .size(10)
        //排序 false是降序 true為升序
        .order(BucketOrder.aggregation("_count", false));
//把聚合條件 添加至 數(shù)據(jù)源
sourceBuilder.aggregation(field);
//把數(shù)據(jù)源 添加至 請求中
searchRequest.source(sourceBuilder);
//創(chuàng)建list用于循環(huán)接收響應(yīng)的對象
List<HotWordVO> hotWordList = Lists.newArrayList();
try {
    //返回響應(yīng)
    SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
    //獲取自己起的聚合名稱
    Terms terms = response.getAggregations().get("order_by_word");
    for (Terms.Bucket bucket : terms.getBuckets()) {
        HotWordVO hotWordVO = new HotWordVO();
        //咱們指定的 word 字段
        String fieldValue = bucket.getKeyAsString();
        //咱們指定的 word 字段在該索引出現(xiàn)的次數(shù)
        long count = bucket.getDocCount();
        hotWordVO.setWord(fieldValue);
        hotWordVO.setCount(count);
        hotWordList.add(hotWordVO);
    }
} catch (IOException e) {
    throw new RuntimeException(e);
}

????????將最終結(jié)果,包括關(guān)鍵字以及該關(guān)鍵字的出現(xiàn)次數(shù)都return給前端,讓前端大哥去處理把。

5.福利 (ES聚合用法)

本節(jié)只使用了最簡單的類似SQL的group by的Es?Terms()函數(shù) 更多細節(jié)有很多

ES常用的桶聚合如下:

1)Terms聚合 - 類似SQL的group by,根據(jù)字段唯一值分組
2)Histogram聚合 - 根據(jù)數(shù)值間隔分組,例如: 價格按100間隔分組,0、100、200、300等等
3)Date histogram聚合 - 根據(jù)時間間隔分組,例如:按月、按天、按小時分組
4)Range聚合 - 按數(shù)值范圍分組,例如: 0-150一組,150-200一組,200-500一組。

提示:桶聚合一般不單獨使用,都是配合指標聚合一起使用,對數(shù)據(jù)分組之后肯定要統(tǒng)計桶內(nèi)數(shù)據(jù),在ES中如果沒有明確指定指標聚合,默認使用Value Count指標聚合,統(tǒng)計桶內(nèi)文檔總數(shù)。

6.ES網(wǎng)上學習資料很多都低于7.0,不適用與現(xiàn)在語法很多都廢棄了,所以我也是參照大佬來進行一個自我總結(jié),讓我們共同勉勵,不斷進步把?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-735669.html

到了這里,關(guān)于ES聚合查詢 基于RestHighLevelClient依賴 Java操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • SpringBoot整合RestHighLevelClient實現(xiàn)查詢操作

    ?? @ 作者: 一恍過去 ?? @ 主頁: https://blog.csdn.net/zhuocailing3390 ?? @ 社區(qū): Java技術(shù)棧交流 ?? @ 主題: SpringBoot整合RestHighLevelClient實現(xiàn)查詢操作 ?? @ 創(chuàng)作時間: 2022年08月14日 為了方便查詢操作,創(chuàng)建索引叫做: nba ,并且添加數(shù)據(jù),http請求如下: 結(jié)果: term 查詢被用于

    2024年02月04日
    瀏覽(15)
  • 項目中使用es(二):使用RestHighLevelClient操作elasticsearch

    寫在前面 之前寫了有關(guān)elasticsearch的搭建和使用springboot操作elasticsearch,這次主要簡單說下使用RestHighLevelClient工具包操作es。 搭建環(huán)境和選擇合適的版本 環(huán)境還是以springboot2.7.12為基礎(chǔ)搭建的,不過這不重要,因為這次想說的是RestHighLevelClient操作elasticsearch,RestHighLevelClient版本

    2024年02月14日
    瀏覽(26)
  • Springboot 整合 Elasticsearch(五):使用RestHighLevelClient操作ES ②

    Springboot 整合 Elasticsearch(五):使用RestHighLevelClient操作ES ②

    ?? 前情提要: Springboot 整合 Elasticsearch(三):使用RestHighLevelClient操作ES ① 目錄 ?一、Springboot 整合 Elasticsearch 1、RestHighLevelClient API介紹 1.1、全查詢 分頁 排序 1.2、單條件查詢 1.2.1、termQuery 1.2.2、matchQuery 1.2.3、短語檢索 1.3、組合查詢 1.4、范圍查詢 1.5、模糊查詢 1.6、分組

    2024年04月11日
    瀏覽(29)
  • SpringBoot 實現(xiàn) elasticsearch 查詢操作(RestHighLevelClient 的案例實戰(zhàn))

    SpringBoot 實現(xiàn) elasticsearch 查詢操作(RestHighLevelClient 的案例實戰(zhàn))

    上一節(jié)講述了 SpringBoot 實現(xiàn) elasticsearch 索引操作,這一章節(jié)講述 SpringBoot 實現(xiàn) elasticsearch 查詢操作。 案例用到的索引庫結(jié)構(gòu)

    2024年02月11日
    瀏覽(19)
  • ES 聚合分組查詢 語法

    ES 聚合分組查詢的語法如下: 其中 index 是索引名稱, size 設(shè)置為 0 意味著只返回聚合結(jié)果而不返回文檔。 aggs 字段是聚合查詢的核心部分,這里以 group_by_field 為例進行分組查詢,其中 terms 指定了分組的字段名稱。 這樣的查詢會返回按照 field_name 字段進行分組后每個分組的

    2024年02月11日
    瀏覽(22)
  • es-06聚合查詢

    概念 聚合(aggs)不同于普通查詢,是目前學到的第二種大的查詢分類,第一種即“query”,因此在代碼中的第一層嵌套由“query”變?yōu)榱恕癮ggs”。 用于進行聚合的字段必須是exact value,分詞字段不可進行聚合 ,對于text字段如果需要使用聚合,需要開啟fielddata,但是通常不建

    2023年04月09日
    瀏覽(17)
  • ES-聚合查詢

    1. 概念 聚合(aggs)不同于普通查詢,是目前學到的第二種大的查詢分類,第一種即“query”,因此在代碼中的第一層嵌套由“query”變?yōu)榱恕癮ggs”。用于進行聚合的字段必須是exact value,分詞字段不可進行聚合,對于text字段如果需要使用聚合,需要開啟fielddata,但是通常不建

    2023年04月25日
    瀏覽(16)
  • Java使用Springboot集成Es官方推薦(RestHighLevelClient)

    Java使用Springboot集成Es官方推薦(RestHighLevelClient)

    SpringBoot集成ElasticSearch的四種方式(主要講解ES官方推薦方式) TransportClient:這種方式即將棄用 官方將在8.0版本徹底去除 Data-Es:Spring提供的封裝的方式,由于是Spring提供的,所以每個SpringBoot版本對應(yīng)的ElasticSearch,具體這么個對應(yīng)的版本,自己去官網(wǎng)看 ElasticSearch SQL:將Elasti

    2023年04月08日
    瀏覽(23)
  • 一個通用的es聚合查詢方法

    調(diào)整方法如下: getSearchCondition為數(shù)據(jù)庫中配置的條件: {\\\"query\\\":{\\\"bool\\\":{\\\"must\\\":[{\\\"exists\\\":{\\\"field\\\":\\\"db_type\\\",\\\"boost\\\":1}},{\\\"exists\\\":{\\\"field\\\":\\\"dst_ip\\\",\\\"boost\\\":1}},{\\\"exists\\\":{\\\"field\\\":\\\"dst_port\\\",\\\"boost\\\":1}},{\\\"exists\\\":{\\\"field\\\":\\\"dst_db_name\\\",\\\"boost\\\":1}},{\\\"exists\\\":{\\\"field\\\":\\\"dst_db_table\\\",\\\"boost\\\":1}},{\\\"exists\\\":{\\\"field\\\":\\\"dst_asset_name\\\",\\\"boost\\\":1}

    2024年02月08日
    瀏覽(20)
  • ElasticSearch(7.8版本)聚合查詢使用javaHighLevelRestClient實現(xiàn)(從MySQL聚合查詢概念->ES聚合概念及實操)

    申明:本文是在實現(xiàn)ES聚合功能中,將過程中查找的多篇博客文獻拼接在一起,參考到的博文全部在標題中附上了原文的超鏈接,分享出來僅是為了提做一個筆記以防忘記,并給大家提供一個參考。 聚合操作指的是在數(shù)據(jù)查找基礎(chǔ)上對于數(shù)據(jù)進一步整理篩選行為,聚合操作也

    2023年04月24日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包