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:必須匹配,但以不評分、過濾模式來進行。這些語句對評分沒有貢獻,只是根據過濾標准來排除或包含文檔