Live2d Test Env

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

 

想要了解更多精彩内容,请跳转官方文档查看

 https://www.elastic.co/guide/cn/elasticsearch/guide/current/getting-started.html

posted @ 2021-11-26 18:03  红尘中人·杨哥  阅读(338)  评论(0编辑  收藏  举报