elasticsearch語法之DSL語言(三)
阿新 • • 發佈:2021-11-26
ES最主要是用來做搜尋和分析的。所以DSL還是對於ES很重要的
DSL:domain Specialed Lanaguage 在特定領域的語言
1:全表查詢(match_all)
GET /demo_test_dev/_search
{
"query": {
"match_all": {}
}
}
2:條件查詢 (match)
根據條件在es中倒排索引分詞查詢,會把包含查詢條件的資料也查詢出來
GET /demo_test_dev/_search
{
"query": {
"match": {
"name": "yjw"
}
}
}
3:排序 (sort)
對查詢出來的資料排序,跟mysql的排序一樣;
因為是對結果集排序,所以是在query同一級
GET /demo_test_dev/_search
{
"query": {
"match": {
"phone": "18210408839"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
4:分頁 (from,size)
對查詢結果集進行分頁,在query同一級
from:從第幾個資料開始
size:每頁資料的個數
GET /demo_test_dev/_search { "query": { "match": { "phone": "18210408839" } }, "sort": [ { "age": { "order": "desc" } } ], "from":0, "size": 2 }
5:結果集返回指定欄位 (_source)
在query同一級
"_source":["欄位1","欄位2",...]
GET /demo_test_dev/_search
{
"query": {
"match": {
"phone": "18210408839"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"_source": ["name","age"],
"from":0,
"size": 2
}
6:多條件查詢 (bool)
bool 過濾可以用來合併多個過濾條件查詢結果的布林邏輯,它包含以下操作符:
must:多個查詢條件的完全匹配,相當於 and。
must_not:多個查詢條件的相反匹配,相當於 not。
should:至少有一個查詢條件匹配, 相當於 or。
這些引數可以分別繼承一個過濾條件或者一個過濾條件的陣列
GET /demo_test_dev/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"phone": "18210408839"
}
}
],
"must_not": [
{
"match": {
"sex": "男"
}
}
],
"should": [
{
"match": {
"age": "28"
}
},
{
"match": {
"age": "29"
}
}
]
}
}
}
7:聚合計算個數
如果不想顯示出具體的資料內容,可以加上如下程式碼:
"size": 0,
GET /demo_test_dev/_search
{
"size": 0,
"aggs": {
"sex_group": {
"terms": {
"field": "sex.keyword",
"size": 10
}
}
}
}
8:聚合計算平均值 (avg)
GET /demo_test_dev/_search
{
"size": 0,
"aggs": {
"sex_group": {
"terms": {
"field": "sex.keyword",
"size": 10
},
"aggs": {
"avg_age": {
"avg": {
"field": "age"
}
}
}
}
}
}
9:聚合後排序 (order)
注意order的位置
GET /demo_test_dev/_search
{
"size": 0,
"aggs": {
"sex_group": {
"terms": {
"field": "sex.keyword",
"size": 10,
"order": {
"avg_age": "desc"
}
},
"aggs": {
"avg_age": {
"avg": {
"field": "age"
}
}
}
}
}
}
10:聚合按照區間分組 (range)
GET /demo_test_dev/_search
{
"size": 0,
"aggs": {
"age_group_range":{
"range": {
"field": "age",
"ranges": [
{
"from": 27,
"to": 28
},
{
"from": 28,
"to":29
}
]
}
}
}
}