1. 程式人生 > 其它 >elasticsearch語法之DSL語言(三)

elasticsearch語法之DSL語言(三)

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
          }
        ]
      }
    }
  }
}