Elasticsearch5.20 基本語法之查詢
阿新 • • 發佈:2019-02-05
到這裡我們會發現ElasticSearch的語法和SQL其實是異曲同工的。它因為功能強大而簡單,亦因為功能強大而複雜。 事實上我這幾篇關於Elasticsearch的筆記都是根據它的官網來的,自己並沒增加什麼東西,因為官方文件很清晰了,而且我也沒有刪減什麼內容,因為這些都是必要的。看過這些後,基本的增刪改查已經沒什麼問題,算是上手了,那麼後續將會看看它的理論基礎部份。#這個例子按狀態分組所有的帳戶,然後返回前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" } } } } } } } }