Elasticsearch 从入门到实战:文档聚合操作及总结

四、文档操作:数据的增删改查

4.1 添加文档

文档(Document)是索引中的最小数据单元,使用 `POST` 或 `PUT` 添加:

```json

POST /products/_doc/1

{

"name": "华为Mate50 Pro",

"price": 6999.0,

"category": "手机",

"create_time": "2023-10-01"

}

```

4.2 查询文档

  • 根据ID查询:

```bash

GET /products/_doc/1

```

  • 条件查询(查找价格低于7000的手机):

```json

GET /products/_search

{

"query": {

"bool": {

"must": [

{ "term": { "category": "手机" } },

{ "range": { "price": { "lt": 7000 } } }

]

}

}

}

```

4.3 更新与删除文档

```json

POST /products/_update/1

{

"doc": {

"price": 6599.0

}

}

DELETE /products/_doc/1

```

五、数据聚合:挖掘数据的深层价值

聚合(Aggregation)是 ES 的杀手级功能,支持多维数据分析。

5.1 指标聚合:统计基础数值

```json

GET /products/_search

{

"size": 0,

"aggs": {

"avg_price": { "avg": { "field": "price" } },

"max_price": { "max": { "field": "price" } }

}

}

```

5.2 桶聚合:分组统计

按商品类别分组,统计每个类别的商品数量:

```json

GET /products/_search

{

"size": 0,

"aggs": {

"category_count": {

"terms": { "field": "category" }

}

}

}

```

5.3 嵌套聚合:复杂分析场景

统计每个商品类别下的平均价格:

```json

GET /products/_search

{

"size": 0,

"aggs": {

"category_group": {

"terms": { "field": "category" },

"aggs": {

"avg_price": { "avg": { "field": "price" } }

}

}

}

}

```

六、最佳实践与常见问题

6.1 性能优化建议

  • 合理设置分片数:分片过多会导致资源浪费,过少影响并发。

  • 冷热数据分离:使用 ILM(索引生命周期管理)自动迁移旧数据。

  • 避免大结果集:使用 `scroll` API 分页查询海量数据。

6.2 常见问题排查

  • 脑裂问题:配置 `discovery.zen.minimum_master_nodes` 避免集群分裂。

  • 索引只读:磁盘空间不足时,ES 会自动将索引设为只读模式。

七、总结

Elasticsearch 的强大不仅在于其检索速度,更在于其灵活的数据分析能力。无论是构建实时日志监控系统,还是实现复杂的商业智能分析,ES 都能提供高效的解决方案。

相关推荐
浮尘笔记2 小时前
Java Snowy框架CI/CD云效自动化部署流程
java·运维·服务器·阿里云·ci/cd·自动化
一直不明飞行9 小时前
Java的equals(),hashCode()应该在什么时候重写
java·开发语言·jvm
REDcker9 小时前
有限状态机与状态模式详解 FSM建模Java状态模式与C++表驱动模板实践
java·c++·状态模式
你的保护色10 小时前
【无标题】
java·服务器·网络
basketball61610 小时前
C++ 构造函数完全指南:从入门到进阶
java·开发语言·c++
淘矿人10 小时前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
小江的记录本10 小时前
【Java基础】泛型:泛型擦除、通配符、上下界限定(附《思维导图》+《面试高频考点清单》)
java·数据结构·后端·mysql·spring·面试·职场和发展
来恩100311 小时前
请求转发与响应重定向的使用
java
万里侯11 小时前
GitOps实战:用Git管理基础设施
微服务·容器·k8s
@杰克成11 小时前
Java学习30
java·开发语言·学习