1. 程式人生 > >Es學習第九課, 聚合查詢和複合查詢

Es學習第九課, 聚合查詢和複合查詢

ES除了實現前幾課的基本查詢,也可以實現類似關係型資料庫的聚合查詢,如平均值sum、最小值min、最大值max等等

我們就用上一課的資料作為參考來舉例

聚合查詢

sum聚合

sum是一個求累加值的聚合,其作用與關係型資料庫中相同。

GET /lib4/items/_search
{
  "size": 0, //表示查詢多少條文件,聚合只需總和結果,輸出文件可以設定為0條
  "aggs": {  //aggs表示是聚合查詢
    "price_of_sum": {//自行取名作為結果集
      "sum": {
        "field":"price"
      }
    }
  }
}

min聚合

min是一個求最小值的聚合,其作用與關係型資料庫中相同

GET /lib4/items/_search
{
    "size": 0,
    "aggs": {
        "price_of_min": {
            "min": {
                "field": "price"
            }
        }
    }
}
 

avg聚合

avg是一個求平均值的聚合,其作用與關係型資料庫中相同。

GET /lib4/items/_search
{
    "size": 0,
    "aggs": {
        "price_of_avg": {
            "avg": {
                "field": "price"
            }
        }
    }
}
 

cardinality聚合

cardinality是一個求基數的聚合,其作用與關係型資料庫中相同。

GET /lib4/items/_search
{
    "size": 0,
    "aggs": {
        "price_of_cardi": {
            "cardinality": { //其實相當於該欄位互不相同的值有多少類,輸出的是種類數
                "field": "price"
            }
        }
    }
}
 

terms聚合

terms是一個分組聚合,其作用與關係型資料庫中相同。

GET /lib4/items/_search  
{
    "size": 0,
    "aggs": {
        "price_of_by": {
            "terms": {
                "field": "price"   //按價格來分組
            }
        }
    }
}

複合查詢

將多個基本查詢組合成單一查詢

本質上就是把我們上一課講的各個查詢組合在一起形成一個單一查詢

使用bool查詢
接受以下引數:
must:文件必須匹配設定條件才能被包含進來
must_not:文件必須不匹配設定條件才能被包含進來
should:如果滿足語句中的任意語句,將增加_source,否則,無任何影響。主要用於修正每個文件的相關性得分
filter:必須匹配,但以不評分、過濾模式來進行。這些語句對評分沒有貢獻,只是根據過濾標準來排除或包含文件