elasticsearch 查询语句

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 查询语句)