1. 程式人生 > >ES查詢學習(隨時更新)

ES查詢學習(隨時更新)

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