Elasticsearch-入门到精通-4 聚合分析

聚合分析有四种

metrics,指标分析聚合
类似于sql语句中的min、max、avg、sum等函数的作用。
bucket,分桶类型
类似于sql语句中的group by之后count 的效果。
pipeline,管道分析
还不太理解(请原谅小编的诚实),感觉像是,在metrics和bucket之后的基础上进一步发分析。
matrix,矩阵分析
还不太理解(请原谅小编的诚实)

五个简单示例

示例基于以下四条数据进行:
在这里插入图片描述

1. 计算每个tag下的商品数量

GET /ecommerce/product/_search
{
  "size": 0,
  "aggs": {
    "all_tags": {
      "terms": { "field": "tags" }
    }
  }
}

其中"size":0,这一行是指返回结果中不要包含原数据列表。即只返回聚合分析结果。

如果执行该语句会报错

“Fielddata is disabled on text fields by default. Set fielddata=true on [your_field_name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.”

则执行以下语句

PUT /ecommerce/_mapping/product
{
  "properties": {
    "tags": {
      "type": "text",
      "fielddata": true
    }
  }
}

错误分析参考:

<think>好的,我现在要帮用户解决Elasticsearch复杂查询的卡任务,特别是头歌平台的第三。首先,我需要理解用户的需求。用户可能已经完成了前两的基础查询,现在需要处理更复杂的查询场景,比如组合多个条件、使用布尔查询或者聚合查询等。 根据用户提供的引用内容,特别是引用[2]和引用[3],里面提到了复合查询,比如布尔查询和多字段匹配multi_match。这说明用户需要了解如何将多个查询条件组合起来,比如must、should、filter等子句的使用。此外,引用[1]中也提到了范围查询和聚合查询,这些可能在复杂查询中用到。 接下来,我需要整理常见的复杂查询类型,确保覆盖用户可能遇到的场景。布尔查询肯定是重点,因为它允许组合多个查询条件。比如,用户可能需要同时满足某些条件(must),排除某些条件(must_not),或者满足至少一个条件(should)。另外,多字段查询如multi_match也是常见的,用于在多个字段中搜索同一键词。 然后,范围查询(range)和精确匹配(term)与全文搜索(match)的区别也需要解释清楚。用户可能还需要了解如何分页、排序以及使用聚合函数进行数据统计,这些都是复杂查询的一部分。 考虑到用户提到的头歌平台,可能他们的任务需要实际的代码示例,比如使用REST API或者Java客户端。因此,我需要提供具体的请求示例,比如使用布尔查询结合term、match和range的DSL语句,并解释每个部分的作用。同时,可能还需要展示如何执行多字段搜索和分页处理。 用户可能还心如何优化查询性能,比如使用filter上下文来避免评分,或者使用constant_score来固定分数。这些优化方法在复杂查询中很重要,可以提升效率。 最后,确保回答结构清晰,分步骤讲解,每个示例都有说明,并附上相问题,帮助用户进一步巩固知识。同时,检查是否引用了正确的资料,比如引用[2]中提到的复合查询和multi_match的例子,引用[3]中的代码结构,确保回答的准确性。</think>### Elasticsearch复杂查询卡任务指南 #### 一、布尔查询组合 布尔查询是Elasticsearch中最核心的复合查询类型,支持`must`、`should`、`must_not`、`filter`四种逻辑组合[^2]: ```json GET /user/_search { "query": { "bool": { "must": [ { "term": { "status": "active" } }, // 精确匹配状态字段 { "match": { "address": "北京" } } // 全文搜索地址字段 ], "filter": [ { "range": { "age": { "gte": 20 } } } // 过滤年龄>=20的文档 ], "must_not": [ { "term": { "vip_level": 0 } } // 排除非VIP用户 ] } } } ``` - `must`:所有条件必须满足(逻辑AND) - `should`:至少满足一个条件(逻辑OR) - `filter`:过滤条件,不参与相性评分 - `must_not`:反向过滤条件 #### 二、多字段搜索 使用`multi_match`实现跨字段搜索[^3]: ```json GET /products/_search { "query": { "multi_match": { "query": "有机奶粉", "fields": ["title^3", "description"], // title字段权重是description的3倍 "type": "best_fields" // 取匹配度最高的字段得分 } } } ``` #### 三、嵌套查询组合 结合分页与排序的高级查询: ```json GET /orders/_search { "query": { "bool": { "must": [ { "term": { "payment_status": "paid" } }, { "range": { "order_time": { "gte": "2024-01-01" } } } ] } }, "from": 0, // 分页起始位置 "size": 10, // 每页数量 "sort": [ // 多重排序规则 { "total_amount": "desc" }, { "_score": "desc" } ] } ``` #### 四、查询优化技巧 1. **过滤上下文优化** 使用`filter`替代`must`可跳过评分计算: ```json "bool": { "must": { "match": { "content": "紧急通知" } }, "filter": { "term": { "department": "财务部" } } } ``` 2. **固定评分查询** 对非相性搜索使用`constant_score`: ```json { "query": { "constant_score": { "filter": { "term": { "category": "电子产品" } }, "boost": 1.2 } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值