美文网首页
elasticsearch 查询语句

elasticsearch 查询语句

作者: 小李不是你 | 来源:发表于2019-08-21 10:38 被阅读0次

    elasticsearch 查询语句

    1、简单查询
       url:index/_search
    
    • 不带参数、分页、排序查询
        json:
        {
           "size":10
        }
    
    • 带分页、字段筛选查询
      {
        "size":10,
        "from":0, //从第几条开始取,若要做分页该值则是page*size
        "query":{ //字段筛选的必要字段,
            "match":{ //查询的基础语句,与之类似的有 terms 等
                "province":"湖南" //字段名
            }
        },
        "sort":{ //排序语句
            "created_at":{
                "order":"desc"
            }
        }
    }
    
    2、复杂查询

    *复杂查询语句

     {
      "size": 10,
      "from": 0,
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "city": "长沙"
              }
            },
            {
              "match": {
                "province": "湖南"
              }
            }
          ]
        }
      },
      "sort": {
        "created_at": {
          "order": "desc"
        }
      }
    }
    
    

    ps:当你需要多个条件来进行查询时,这时可以考虑用复杂查询来进行,复杂查询的语句构造

      {
      "query": {
        "bool": {
          "must": [
            { // must 复杂查询字段,相当于mysql中的 AND
              "match": { 
                "fields": "value"
              }
            },
            {
              "range": { //范围查询,具体 下面会一一讲述
                  "fields":{
                      "gte":1,
                      "lte":2
                  }
              }
            }
          ]
        }
      }
    }
    
    3、聚合统计
    • 概述
      聚合查询非常适合用于统计某个索引中的各项数据,比如:统计某天的每个小时的用户量等

    • 语句

      {
      "size": 0,
      "query":{  //筛选条件来得到统计信息
          "bool":{
              "must":{
                  "match":{
                      "uid":60118080791
                  }
              }
          }
      },
      "aggs": {
        "result": {
          "date_histogram": {  //按日期分组
            "field": "created_at", 
            "interval": "2h", // 分组间隔时间 可以是1h 1day,具体自己去了解
            "format": "yyyy-MM-dd HH:mm:ss" //格式化
          },
          "aggs":{
              "total":{ //结果字段,自定义
                  "terms":{ 
                      "field":"uid", 
                      "size":200  //显示数量
                  },
                  "aggs":{
                      "max_follower":{ //结果字段、自定义
                          "extended_stats":{ //得到的统计信息,有平均值、最大值、最小值、方差
                              "field":"follower_count"
                          }
                      }
                  }
              }
          }
        }
      }
    }
    
    4、语句的相应字段解释
    • must
      must 相当于 mysql 中的 and 语句,比如我要查询学生表中性别为并且年龄为18岁的学生,语句构造如下:
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "gender": 1
              }
            },
            {
              "match": {
                "age": 18
              }
            }
          ]
        }
      }
    }
    

    在以上语句中,如果有多个条件,则 must 后面需是数组对象,即:must:[{},{}]

    • match
      match 一般适用于在字段查询时,相当于模糊查询,如果要查询的字段设置了分词器,就会是模糊查询,如:我需要查询签名中含有操作的所有用户,语句构造如下:
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "signature": "操作"
              }
            }
          ]
        }
      }
    }
    

    上述语句中如果只有一个条件,建议不使用 bool结构,可以使用最简单 query:{match:{field:""}}
    match类似的结构有 terms,该结构主要是用于精确查询,

    • range
      range相当于mysql中的between,一般用户范围查询,比如:我要查询年龄在18至20岁的学生,语句构造如下:
    {
      "query": {
        "bool": {
          "must": [
            {
              "range": {
                "age": {
                    "gte":18,
                    "lte":20
                }
              }
            }
          ]
        }
      }
    }
    

    gte相当于 >lte相当于 <

    相关文章

      网友评论

          本文标题:elasticsearch 查询语句

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