美文网首页
Elasticsearch查询语法

Elasticsearch查询语法

作者: 胖嘟嘟洒酒疯 | 来源:发表于2019-05-10 10:22 被阅读0次

    查询语法

    • match all query
    {
      "query": {
        "match_all": {}
      }
    }
    
    • define query number
    {
      "query": {
        "match_all": {}
      },
      "from": 2,        // 从2条记录开始取
      "size": 4,        // 取4条数据
      "sort": {
        "studentNo": {  // 按studentNo字段升序
          "order": "asc"// 降序为desc
        }
      } 
    }
    
    • term query
    {
      "query": {
        "term": {
          "name": "诸葛亮"
        }
      }
    }
    
    • bool query
    {
      "query": {
        "bool": {
          "must": [    //与之对应的还有should must not
            {
              "term": {
                "classNo": "2"
              }
            },
            {
              "term": {
                "isLeader": "true"
              }
            }
          ]
        }
      }
    }
    
    • ids query
    {
      "query": {
        "ids": {
          "type": "student",
          "values": [
            "1",
            "2"
          ]
        }
      }
    }
    
    • prefix query
    {
      "query": {
        "prefix": {
          "name": "赵"
        }
      }
    }
    
    • range query
    {
      "query": {
        "range": {
          "age": {
            "gte": "18",     // 表示>=
            "lte": "20"      // 表示<=
          }
        }
      }
    }
    
    • terms query
    {
      "query": {
        "terms": {
          "studentNo": [
            "1",
            "3"
          ]
        }
      }
    }
    
    • wildcard query
    {
      "query": {
        "wildcard": {
          "name": "*亮"
        }
      }
    }
    
    • regexp query
    {
      "query": {
        "regexp": {
          "address": ".*长沙市.*"  // 这里的.号表示任意一个字符
        }
      }
    }
    
    • term filter
    {
      "filter": {               
        "term": {
          "name": "诸葛亮",
          "_cache" : true // 与query主要是这里的区别,可以设置数据缓存
        }
      }
    }
    
    • bool filter
    {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "classNo": "2"
              }
            },
            {
              "term": {
                "isLeader": "true"
              }
            }
          ]
        }
      }
    }
    
    • and filter
    {
      "filter": {
          "and": [
            {
              "term": {
                "classNo": "2"
              }
            },
            {
              "term": {
                "isLeader": "true"
              }
            }
          ]
      }
    }
    
    • or filter
    {
      "filter": {
          "or": [
            {
              "term": {
                "classNo": "2"
              }
            },
            {
              "term": {
                "isLeader": "true"
              }
            }
          ]
      }
    }
    
    • esists filter
    {
      "filter": {
        "exists": {
          "field": "address"
        }
      }
    }
    
    • miss filter
    {
      "filter": {
        "missing": {
          "field": "address"
        }
      }
    }
    
    • prefix filter
    {
      "filter": {
        "prefix": {
          "name": "赵"
        }
      }
    }
    
    • range filter
    {
      "filter": {
        "range": {
          "age": {
            "gte": "18",
            "lte": "20"
          }
        }
      }
    
    • terms filter
    {
      "filter": {
        "terms": {
          "studentNo": [
            "1",
            "3"
          ]
        }
      }
    }
    
    • regexp filter
    {
      "filter": {
        "regexp": {
          "address": ".*长沙市.*"
        }
      }
    }
    

    聚合api
    1.metric(度量聚合)多用于number计算
    2.bucketing(桶聚合)类似与sql分组

    • 聚合api格式
    "aggregations" : {                  // 表示聚合操作,可以使用aggs替代
        "<aggregation_name>" : {        // 聚合名,可以是任意的字符串。用做响应的key,便于快速取得正确的响应数据。
            "<aggregation_type>" : {    // 聚合类别,就是各种类型的聚合,如min等
                <aggregation_body>      // 聚合体,不同的聚合有不同的body
            }
            [,"aggregations" : { [<sub_aggregation>]+ } ]? // 嵌套的子聚合,可以有0或多个
        }
        [,"<aggregation_name_2>" : { ... } ]* // 另外的聚合,可以有0或多个
    }
    

    度量聚合

    • min agg
    "aggs": {
        "min_age": {
          "min": {
            "field": "age"
          }
        }
    }
    
    • max agg
    "aggs": {
        "max_age": {
          "max": {
            "field": "age"
          }
        }
    }
    
    • sum agg
      "aggs": {
        "sum_age": {
          "sum": {
            "field": "age"
          }
        }
      }
    
    • avg agg
     "aggs": {
        "avg_age": {
          "avg": {
            "field": "age"
          }
        }
      }
    
    • stats agg
     "aggs": {
        "stats_age": {
          "stats": {
            "field": "age"
          }
        }
      }
    
    • top hits agg
     "aggs": {
        "top_age": {
          "top_hits": {
            "sort": [               // 排序
              {
                "age": {            // 按年龄降序
                  "order": "desc"
                }
              }
            ],
            "_source": {
              "include": [           // 指定返回字段
                "name",
                "age"
              ]
            },
            "size": 2                 // 取前2条数据
          }
        }
      }
    

    桶聚合

    • terms agg
      "aggs": {
        "terms_classNo": {
          "terms": {
            "field": "classNo",            // 按照班号进行分组
            "order": {                     // 按学生数从大到小排序
              "_count": "desc"
            },
            "size": 2                      // 取前两名
          }
        }
      }
    
    • range agg
      "aggs": {
        "range_age": {
          "range": {
            "field": "age",
            "ranges": [
              {
                "to": 15
              },
              {
                "from": "16",
                "to": "18"
              },
              {
                "from": "19",
                "to": "21"
              },
    
              {
                "from": "22",
                "to": "24"
              },
              {
                "from": "25"
              }
            ]
          }
        }
      }
    
    • date range agg
      "aggs": {
        "range_age": {
          "date_range": {
            "field": "birthday",
            "ranges": [
              {
                "to": "now-25y"
              }
            ]
          }
        }
      }
    
    • histogram agg
    "aggs": {
        "histogram_age": {
          "histogram": {
            "field": "age",
            "interval": 2,               // 距离为2
            "min_doc_count": 1           // 只返回记录数量大于等于1的区间
          }
        }
      }
    
    • date histogram agg
    "aggs": {
        "data_histogram_birthday": {
          "date_histogram": {
            "field": "birthday",
            "interval": "year",              // 按年统计
            "format": "yyyy"                 // 返回结果的key的格式
          }
        }
      }
    
    • missing agg
     "aggs": {
        "missing_address": {
          "missing": {
            "field": "address"
          }
        }
      }
    
    • 嵌套查询班内年龄最大的
     "aggs": {
        "missing_address": {
          "terms": {
            "field": "classNo"
          },
          "aggs": {                 // 在这里嵌套新的子聚合
            "max_age": {
              "max": {              // 使用max聚合
                "field": "age"
              }
            }
          }
        }
      }
    

    压缩存储算法:

    term index fst算法:字母前缀匹配

    多个field倒排索引:bitmaps 按位与运算

    1. Roaring bitmaps

    [1,3,4,7,10] [1,0,1,1,0,0,1,0,0,1]

    增量编码压缩算法:从小到大排列,数据增量存储

    监控元数据;

    get /index/_search
    _settings
    _segments
    _stats
    _flush
    _refresh

    ​ _count
    ​ _mapping

    相关文章

      网友评论

          本文标题:Elasticsearch查询语法

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