当前位置:   article > 正文

ES学习记录4——ES中的过滤和聚合_es aggs 结果过滤 包含某些条件才返回

es aggs 结果过滤 包含某些条件才返回

6. 过滤

 之前忽略了在搜索返回结果中的hits._scoremax_score参数,其实都是指文档与指定的搜索查询匹配程度的相对度量,score越高,匹配度越高。但查询并不总是需要产生分数,特别是当它们仅用于“过滤”文档集时,Elasticsearch会检测这些情况并自动优化查询执行,以便不计算无用的分数。bool搜索和range搜索都支持过滤操作,如(在bool内部):

// 过滤得到20000<=balance<=30000的文档
GET /bank/_search
{
   
  "query": {
   
    "bool": {
   
      "must": {
    "match_all": {
   } },
      "filter": {
   
        "range": {
   
          "balance": {
   
            "gte": 20000,
            "lte": 30000
          }
        }
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

7. 聚合操作

 聚合提供了数据分组和统计的功能(可以像SQL中group by那样去理解),在Elasticsearch中,执行搜索后返回结果时,在这个返回结果中将聚合结果与命中结果(就是实际返回hits)分开(即分为搜索命中结果和聚合结果)。可以运行查询和多个聚合,并一次性获取两个(或任一个)操作的结果,从而避免使用简洁的API进行网络往返所耗费的时间。

 下面是一个按用户所在的州state为聚合的操作条件:

GET /bank/_search
{
   
  "size": 0,
  "aggs": {
   
    "group_by_state": {
   
      "terms": {
   
        "field": "state.keyword"
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

上述aggs就是用来指定聚合条件的,这里为了便于观察聚合结果,直接让返回的命中结果中具体结果数组显示0个"size": 0,聚合结果也是默认显示top10,最终的结果为:

{
   
  "took": 0,
  "timed_out": false,
  "_shards": {
   
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
   
    "total": 1000,
    "max_score": 0,
    // 这边数组直接显示0个
    "hits": []
  },
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/750672
推荐阅读
相关标签
  

闽ICP备14008679号