ES查詢學習(隨時更新)
阿新 • • 發佈:2018-11-21
ES查詢學習
常用查詢
match_all 查詢所有
match 分詞匹配查詢, 模糊查詢
term 精確查詢, 單個欄位等值匹配
terms 多個欄位等值匹配
基礎查詢
{ "query": {"match": {}} # 編寫查詢條件 "size": 1 # 返回數量, 預設為10 "from": 10 # 索引下標, 從第幾條開始, 預設為0 "sort": {"length": {"order": "desc"}} # 按length進行降序排序 "_source": ["id", "length"] # 返回多個欄位 }
布林查詢
{ "query": { "bool": { "must": [ {"term": {'id': 110}}, ### must == and 必須兩個都為真才會返回 {"term": {'id': 111}} ], "should": [ {"match": {'borough': "黑龍國際"}}, ### should == or 兩個有一個為真才會返回 {"match": {'borough': "天下國際"}} ], "must_not": [ {"match": {'name': "國美花園"}}, ### must_not == not 全部為假才會返回 {"match": {'name': "天壇公園"}}, ] } } } gt 大於 gte 大於等於 lt 小於 lte 小於等於
過濾查詢(filter過濾條件)
{
"query": {
"bool": {
"must": {"match_all": {}},
"filter": {
"range": {
"price": {
"gte": 1000, ### 查詢price欄位在1000到2000之內的所有資料
"lte": 2000
}
}
}
}
}
}
相當於 select * from complex where 1000 <= price and price <= 2000
聚合查詢(Aggregations)
{ "aggs": { "group_by_state": { "terms": { "field": "borough_name" ### 所有資料按照小區名進行分組, 然後按照分組記錄數從大到小排序 } } }, "size": 0 ### 只返回聚合結果 } 相當於 select borough_name, count(*) from complex group by borough_name order by count(*) desc
聚合查詢裡面執行求平均操作
{
"aggs": {
"group_by_state": {
"terms": {
"field": "borough_name" ### 所有資料按照小區名進行分組, 然後按照分組記錄數從大到小排序
}
},
"aggs": {
"average_balance": {
"avg": {
"field": "price"
}
}
}
},
"size": 0 ### 只返回聚合結果
}
select borough_name, avg(price) ,count(*) from complex group by borough_name order by count(*) desc