1. 程式人生 > >Elasticsearch5.20 基本語法之查詢

Elasticsearch5.20 基本語法之查詢

#這個例子按狀態分組所有的帳戶,然後返回前10(預設)狀態,按照count遞減排序(也是預設)
GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      }
    }
  }
}
#與SQL語法相識:SELECT state, COUNT(*) FROM bank GROUP BY state ORDER BY COUNT(*) DESC
#注:設定size=0為不顯示搜尋匹配。你可以不寫size=0看看返回結果

#下面示例計算按州(state)的平均帳戶餘額(僅針對按降序排序的前10個州)
GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}

#注意我們如何在average_balance聚合中巢狀group_by_state聚合。這是所有聚合的常見模式。您可以任意巢狀聚合中的聚合,以提取您需要從資料中獲得的透視摘要。基於之前的聚合,現在我們以降序對平均餘額進行排序
GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword",
        "order": {
          "average_balance": "desc"
        }
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}

#這個例子演示了我們如何根據年齡段(20-29,30-39和40-49),然後按性別分組,然後最終得到每個年齡段的每個性別的平均帳戶餘額:
GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_age": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 20,
            "to": 30
          },
          {
            "from": 30,
            "to": 40
          },
          {
            "from": 40,
            "to": 50
          }
        ]
      },
      "aggs": {
        "group_by_gender": {
          "terms": {
            "field": "gender.keyword"
          },
          "aggs": {
            "average_balance": {
              "avg": {
                "field": "balance"
              }
            }
          }
        }
      }
    }
  }
}

到這裡我們會發現ElasticSearch的語法和SQL其實是異曲同工的。它因為功能強大而簡單,亦因為功能強大而複雜。 事實上我這幾篇關於Elasticsearch的筆記都是根據它的官網來的,自己並沒增加什麼東西,因為官方文件很清晰了,而且我也沒有刪減什麼內容,因為這些都是必要的。看過這些後,基本的增刪改查已經沒什麼問題,算是上手了,那麼後續將會看看它的理論基礎部份。