es7.x—查询篇

作者: 小胖学编程 | 来源:发表于2021-05-06 14:37 被阅读0次

    文章来源

    1. 查询基本语法结构
      1.1 基础结构
      1.2 query字节
      1.3 aggs子句
      1.4 sort子句
      1.5 ES查询分页
      1.6 _source

    通过ES查询表达式(Query DSL),可以实现复杂的查询功能,ES查询表达式主要由JSON格式编写,可以灵活的组合各种查询语句。

    1. 查询基本语法结构

    1.1 基础结构

    GET /{索引名}/_search
    {
        "from" : 0,  // 返回搜索结果的开始位置
        "size" : 10, // 分页大小,一次返回多少数据
        "_source" :[ ...需要返回的字段数组... ],
        "query" : { ...query子句... },
        "aggs" : { ..aggs子句..  },
        "sort" : { ..sort子句..  }
    }
    

    {索引名},支持支持一次搜索多个索引,多个索引使用逗号分隔,例子:

    GET /order1,order2/_search
    

    按前缀匹配索引名:搜索索引名以order开头的索引。

    GET /order*/_search
    

    当我们执行查询语句,返回的JSON数据格式如下

    {
      "took" : 5, // 查询消耗时间,单位毫秒 
      "timed_out" : false, // 查询是否超时
      "_shards" : { // 本次查询参与的ES分片信息,查询中参与分片的总数,以及这些分片成功了多少个失败了多少个
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : { // hits字段包含我们搜索匹配的结果
        "total" : { // 匹配到的文档总数
          "value" : 1, // 找到1个文档
          "relation" : "eq"
        },
        "max_score" : 1.0, // 匹配到的最大分值
        "hits" : [ 
             // 这里就是我们具体的搜索结果,是一个JSON文档数组
        ]
      }
    }
    

    1.2 query字节

    query子句主要用来编写类似SQL的Where语句,支持布尔查询(and/or)、IN、全文搜索、模糊匹配、范围查询(大于小于)。

    es(1)—基础Rest API命令
    es(2)—复杂的多条件查询(bool查询与constant_score查询)
    es(4)—查询条件match和term
    es(5)—terms的用法
    es7.x(6)—minimum_should_match最低匹配度
    es7.x(7)—短语搜索(match_phrase)
    es7.x(8)— 多字段匹配检索 multi_match query
    es7.x(9)— match query的参数

    1.3 aggs子句

    aggs子句,主要用来编写统计分析语句,类似SQL的group by语句
    es7.x(10)aggs聚合查询

    1.4 sort子句

    sort子句,用来设置排序条件,类似SQL的order by语句。

    ES的默认排序时根据相关性分数排序,如果我们想根据查询结果中的指定字段排序,需要使用sort关键字处理。

    语法:

    GET /{索引名}/_search
    {
      "query": {
        ...查询条件....
      },
      "sort": [
        {
          "{Field1}": { // 排序字段1
            "order": "desc" // 排序方向,asc或者desc, 升序和降序
          }
        },
        {
          "{Field2}": { // 排序字段2
            "order": "desc" // 排序方向,asc或者desc, 升序和降序
          }
        }
        ....多个排序字段.....
      ]
    }
    

    sort子句支持多个字段排序,类似SQL的order by。

    例子:

    GET /order_v2/_search
    {
      "query": {
        "match_all": {}
      },
      "sort": [
        {
          "order_no": {
            "order": "desc"
          }
        },
        {
          "shop_id": {
            "order": "asc"
          }
        }
      ]
    }
    

    查询order_v2索引的所有结果,结果根据order_no字段降序,order_no相等的时候,再根据shop_id字段升序排序。

    1.5 ES查询分页

    ES查询的分页主要通过from和size参数设置,类似MYSQL 的limit和offset语句。

    GET /order_v2/_search
    {
      "from": 0,
      "size": 20, 
      "query": {
        "match_all": {}
      }
    }
    

    1.6 _source

    _source用于设置查询结果返回什么字段,类似select语句后面指定字段。

    GET /order_v2/_search
    {
      "_source": ["order_no","shop_id"], 
      "query": {
        "match_all": {}
      }
    }
    

    仅返回,order_no和shop_id字段。

    相关文章

      网友评论

        本文标题:es7.x—查询篇

        本文链接:https://www.haomeiwen.com/subject/ixhddltx.html