es——DSL实现聚合

Bucket聚合语法

GET /hotel/_search
{
  "size": 0,  // 设置size为0,结果中不包含文档,只包含聚合结果
  "aggs": { // 定义聚合
    "brandAgg": { //给聚合起个名字
      "terms": { // 聚合的类型,按照品牌值聚合,所以选择term
        "field": "brand", // 参与聚合的字段
        "size": 20 // 希望获取的聚合结果数量
      }
    }
  }
}

聚合结果排序

默认情况下,Bucket聚合会统计Bucket内的文档数量,记为count,并且按照count降序排序。

我们可以指定order属性,自定义聚合的排序方式:

GET /hotel/_search
{
  "size": 0, 
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "order": {
          "_count": "asc" // 按照_count升序排列
        },
        "size": 20
      }
    }
  }
}

限定聚合范围

默认情况下,Bucket聚合是对索引库的所有文档做聚合,但真实场景下,用户会输入搜索条件,因此聚合必须是对搜索结果聚合。那么聚合必须添加限定条件。

我们可以限定要聚合的文档范围,只要添加query条件即可:

GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "lte": 200 // 只对200元以下的文档聚合
      }
    }
  }, 
  "size": 0, 
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 20
      }
    }
  }
}

 Metric聚合语法

GET /hotel/_search
{
  "size": 0, 
  "aggs": {
    "brandAgg": { 
      "terms": { 
        "field": "brand", 
        "size": 20
      },
      "aggs": { // 是brands聚合的子聚合,也就是分组后对每组分别计算
        "score_stats": { // 聚合名称
          "stats": { // 聚合类型,这里stats可以计算min、max、avg等
            "field": "score" // 聚合字段,这里是score
          }
        }
      }
    }
  }
}

 

### Elasticsearch DSL语言介绍 #### 查询DSL (Query DSL) 查询DSL用于定义如何搜索文档以及评估这些文档的相关性。当使用`query DSL`时,不仅会判断某个文档是否匹配给定的查询条件,还会计算该文档相对于其他文档的重要性得分(`_score`)。此分数反映了文档与查询之间的匹配程度;较高的分数意味着更紧密的关系[^1]。 ```json GET /my-index/_search { "query": { "match": { "title": "Elasticsearch" } } } ``` 上述代码展示了最基础形式之一——`match`查询,它尝试找到字段`title`中含有单词"Elasticsearch"的所有记录,并依据其相关性给出评分。 #### 过滤DSL (Filter DSL) 相比之下,过滤DSL仅关注于精确筛选符合条件的数据集而不考虑权重或排名因素。由于不需要执行代价高昂的相关性运算,这类操作通常更快也更加高效。此外,一旦创建成功之后,Elasticsearch将会把常用到的结果缓存起来以便后续重复利用,从而进一步提升整体性能表现。 ```json GET /my-index/_search { "query": { "bool": { "filter": [ { "term": { "status": "published" }} ] } } } ``` 这里展示了一个简单的布尔查询中的过滤子句实例,其中只选择了状态标记为已发布的条目作为最终返回结果的一部分。 #### 功能强大的组合能力 除了基本的功能外,DSL还允许使用者构建更为复杂的逻辑表达式来满足特定需求下的精准检索要求。例如可以将多个不同的查询/过滤组件结合起来形成一个综合性的请求体,甚至还可以加入聚合分析等功能模块实现多维度数据挖掘目的[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值