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 都能提供高效的解决方案。

相关推荐
高兴达8 分钟前
Spring boot入门工程
java·spring boot·后端
萧曵 丶9 分钟前
Spring @TransactionalEventListener
java·数据库·spring·事务·transactional·异步
笑衬人心。10 分钟前
HTTPS详解:原理 + 加解密过程 + 面试问答
java·网络协议·http·面试·https
蓝澈112112 分钟前
弗洛伊德(Floyd)算法-各个顶点之间的最短路径问题
java·数据结构·动态规划
再见晴天*_*21 分钟前
logback 日志不打印
java·服务器·logback
幽络源小助理29 分钟前
SpringBoot基于JavaWeb的城乡居民基本医疗信息管理系统
java·spring boot·学习
欧阳有财32 分钟前
[java八股文][Mysql面试篇]日志
java·mysql·面试
TDengine (老段)41 分钟前
使用 StatsD 向 TDengine 写入
java·大数据·数据库·时序数据库·iot·tdengine·涛思数据
真实的菜43 分钟前
JVM类加载系统详解:深入理解Java类的生命周期
java·开发语言·jvm
N_NAN_N1 小时前
类图+案例+代码详解:软件设计模式----原型模式
java·设计模式·原型模式