Elasticsearch 使用 RESTful API 聚合查詢

上一篇我們學(xué)習(xí)了使用 RESTful API 進(jìn)行常規(guī)查詢硼讽,這一篇我們來(lái)學(xué)習(xí)使用 RESTful API 進(jìn)行聚合查詢巢价,聚合查詢就是對(duì)文檔數(shù)據(jù)按照某些維度進(jìn)行統(tǒng)計(jì),如果你熟悉 MySql 的聚合查詢固阁,這個(gè)也就好理解了壤躲,這里先介紹一些常用的聚合查詢。

首先我們修改一下之前的文檔數(shù)據(jù)备燃,都添加school字段碉克,例如:

POST user/_update/1
{
  "doc": {
    "school": "清華"
  }
}

最終的文檔數(shù)據(jù)如下:


1、avg

avg用來(lái)求平均值并齐,例如統(tǒng)計(jì)用戶的平均年齡:

GET user/_search
{
  "aggs": {
    "avg_age": {
      "avg": {
        "field": "age"
      }
    }
  }
}

aggs是固定的寫法漏麦,里邊可以包含多個(gè)統(tǒng)計(jì)維度客税;avg_age相當(dāng)于統(tǒng)計(jì)結(jié)果的名稱,可以自定義撕贞;avg表示求平均值的聚合操作更耻,也是固定寫法;field表示對(duì)那個(gè)字段的值求平均值捏膨。

最終的結(jié)果如下:


2秧均、max

max表示求最大值,如下統(tǒng)計(jì)最大年齡:

GET user/_search
{
  "aggs": {
    "max_age": {
      "max": {
        "field": "age"
      }
    }
  }
}

3号涯、min

min表示求最大值目胡,如下統(tǒng)計(jì)最小年齡:

GET user/_search
{
  "aggs": {
    "min_age": {
      "min": {
        "field": "age"
      }
    }
  }
}

類似的還有sum,這里就不介紹了链快。

4誉己、range

range表示按區(qū)間統(tǒng)計(jì),比如指定時(shí)間范圍域蜗,指定大小區(qū)間等巫延;field表示要統(tǒng)計(jì)的字段;ranges里邊包含多個(gè)區(qū)間地消;from表示區(qū)間的開(kāi)始,to表示區(qū)間的結(jié)束畏妖;如下統(tǒng)計(jì)年齡在[0, 20]脉执、[20, 40][40, 100]三個(gè)區(qū)間的人數(shù):

GET user/_search
{
  "aggs": {
    "range_age": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 0,
            "to": 20
          },
          {
            "from": 20,
            "to": 40
          },
          {
            "from": 40,
            "to": 100
          }
        ]
      }
    }
  }
}

4戒劫、filter

filter可以按指定的條件過(guò)濾數(shù)據(jù)半夷,如下統(tǒng)計(jì)姓的人數(shù):

GET user/_search
{
  "aggs": {
    "wang_name": {
      "filter": {
        "match_phrase_prefix": {
          "name": "王"
        }
      }
    }
  }
}

5、terms

terms可以實(shí)現(xiàn)按指定字段分組迅细,field用來(lái)指定用哪個(gè)字段分組巫橄,size表示統(tǒng)計(jì)出多少組數(shù)據(jù),order表示各組數(shù)據(jù)如何排序茵典。如下實(shí)現(xiàn)按school字段對(duì)數(shù)據(jù)進(jìn)行分組湘换,統(tǒng)計(jì)出10組數(shù)據(jù)即可,并按每組的數(shù)據(jù)量升序排列:

GET user/_search
{
  "aggs": {
     "group_school":{
      "terms": {
        "field": "school.keyword",
        "size": 10,
        "order": {
          "_count": "asc"
        }
      }
    }
  }
}


這里有一點(diǎn)需要注意统阿,school后添加了.keyword彩倚,如果不添加會(huì)產(chǎn)生如下的異常:

Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [school] in order to load field data by uninverting the inverted index. Note that this can use significant memory.

大致的意思是,使用text類型的字段數(shù)據(jù)進(jìn)行聚合扶平、排序時(shí)帆离,由于text類型的字段未被 ES 優(yōu)化處理,所以無(wú)法進(jìn)行這些操作结澄「绻龋可以使用關(guān)鍵字字段來(lái)解決這個(gè)問(wèn)題岸夯,即在字段名后添加.keyword∶峭祝或者設(shè)置school字段設(shè)置fielddata=true猜扮,但這樣這可能會(huì)占用大量?jī)?nèi)存,需要慎重王悍。

6破镰、子統(tǒng)計(jì)

上邊我們對(duì)數(shù)據(jù)按照school字段進(jìn)行了分組,我們還可以統(tǒng)計(jì)組內(nèi)人員的最小年齡压储,這就是子統(tǒng)計(jì)鲜漩,如下:

GET user/_search
{
  "aggs": {
     "group_school":{
      "terms": {
        "field": "school.keyword",
        "size": 10,
        "order": {
          "_key": "asc"
        }
      },
      "aggs": {
        "min_age": {
          "min": {
            "field": "age"
          }
        }
      }
    }
  }
}

7、top_hits

top_hits可以用來(lái)跟蹤正在聚合統(tǒng)計(jì)的相關(guān)文檔數(shù)據(jù)集惋。前邊介紹terms時(shí)孕似,我們按school字段對(duì)數(shù)據(jù)進(jìn)行了分組,但是我們還不知道組內(nèi)具體的文檔數(shù)據(jù)刮刑,現(xiàn)在我們使用top_hits就可以看到每組內(nèi)具體的文檔數(shù)據(jù)喉祭, 如下:

GET user/_search
{
  "aggs": {
    "group_school": {
      "terms": {
        "field": "school.keyword",
        "size": 10,
        "order": {
          "_count": "asc"
        }
      },
      "aggs": {
        "group_data": {
          "top_hits": {
            "size": 10
          }
        }
      }
    }
  }
}

以下是統(tǒng)計(jì)結(jié)果的部分截圖:


先介紹這么多吧,后期看情況再補(bǔ)充雷绢。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泛烙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子翘紊,更是在濱河造成了極大的恐慌蔽氨,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帆疟,死亡現(xiàn)場(chǎng)離奇詭異鹉究,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)踪宠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門自赔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人柳琢,你說(shuō)我怎么就攤上這事绍妨。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)诀豁。 經(jīng)常有香客問(wèn)我翎承,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮提陶,結(jié)果婚禮上行施,老公的妹妹穿的比我還像新娘允坚。我一直安慰自己,他們只是感情好蛾号,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布稠项。 她就那樣靜靜地躺著,像睡著了一般鲜结。 火紅的嫁衣襯著肌膚如雪展运。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天精刷,我揣著相機(jī)與錄音拗胜,去河邊找鬼。 笑死怒允,一個(gè)胖子當(dāng)著我的面吹牛埂软,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纫事,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼勘畔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了丽惶?” 一聲冷哼從身側(cè)響起炫七,我...
    開(kāi)封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钾唬,沒(méi)想到半個(gè)月后诉字,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡知纷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陵霉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琅轧。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖踊挠,靈堂內(nèi)的尸體忽然破棺而出乍桂,到底是詐尸還是另有隱情,我是刑警寧澤效床,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布睹酌,位于F島的核電站,受9級(jí)特大地震影響剩檀,放射性物質(zhì)發(fā)生泄漏憋沿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一沪猴、第九天 我趴在偏房一處隱蔽的房頂上張望辐啄。 院中可真熱鬧采章,春花似錦、人聲如沸壶辜。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)砸民。三九已至抵怎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岭参,已是汗流浹背反惕。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冗荸,地道東北人承璃。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蚌本,于是被迫代替她去往敵國(guó)和親盔粹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 概要 Elasticsearch的聚合查詢程癌,跟數(shù)據(jù)庫(kù)的聚合查詢效果是一樣的舷嗡,我們可以將二者拿來(lái)對(duì)比學(xué)習(xí),如求和嵌莉、求...
    清茶豆奶閱讀 385評(píng)論 0 0
  • 聚合分析簡(jiǎn)介 聚合分析:英文為Aggregation进萄,是es除搜索功能外提供的針對(duì)es數(shù)據(jù)做統(tǒng)計(jì)分析的功能。 功能...
    小波同學(xué)閱讀 4,006評(píng)論 0 5
  • 聚合 類似于DSL查詢表達(dá)式锐峭,聚合也有可組合的語(yǔ)法:獨(dú)立單元的功能可以被混合起來(lái)提供你需要的自定義行為中鼠。這意味著只...
    不知名的蛋撻閱讀 418評(píng)論 0 0
  • 在數(shù)據(jù)庫(kù)領(lǐng)域,借助SQL我們可以獲取表中的最大值(Max)沿癞、最小值(Min)援雇,還可以對(duì)數(shù)據(jù)進(jìn)行分組(Group)。...
    冰河winner閱讀 1,628評(píng)論 0 5
  • 以球員信息為例椎扬,player索引的player type包含5個(gè)字段惫搏,姓名,年齡蚕涤,薪水筐赔,球隊(duì),場(chǎng)上位置揖铜。index...
    香山上的麻雀閱讀 1,184評(píng)論 0 1