news 2026/2/24 17:26:57

Elasticsearch基本用法在Kibana中的完整示例演示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Elasticsearch基本用法在Kibana中的完整示例演示

从零上手:在 Kibana 中实战 Elasticsearch 核心操作

你有没有遇到过这样的场景?日志堆积如山,排查问题像大海捞针;商品搜索不精准,用户一搜“耳机”出来一堆充电宝;监控数据分散各处,想看个趋势图还得手动导出 Excel……

这时候,Elasticsearch + Kibana就是你的救星。

作为现代可观测性与搜索系统的基石,Elasticsearch 不仅能让你的查询快到飞起,还能通过 Kibana 实现秒级可视化分析。而这一切,并不需要你一开始就精通分布式原理或 Java 底层源码——只要你会写 JSON、懂点 HTTP 请求,就能从 Kibana 的 Dev Tools 控制台开始,一步步掌握它的核心玩法。

本文将带你以真实开发视角,完整走一遍 Elasticsearch 的典型使用流程:建索引、写数据、查信息、做聚合,全部基于 Kibana 操作,边讲边练,拒绝空谈概念。


先看清全貌:Elasticsearch 是怎么工作的?

在敲下第一个PUT命令前,我们得先搞清楚几个关键角色:

  • Index(索引):不是数据库里的“索引”,而是更像一张表。比如你可以有logs-2025products这样的索引。
  • Document(文档):每条数据就是一个 JSON 文档,类似关系型数据库中的一行记录。
  • Shard & Replica(分片和副本):数据自动拆成多块存储在不同节点上,既提升性能又保证高可用。
  • Kibana Dev Tools:一个藏在 Kibana 里的“命令行”,可以直接发送 REST 请求给 ES,是调试和学习的最佳入口。

当你执行一条查询时,请求先到协调节点,它会把任务分发到各个分片并行处理,最后汇总结果返回。整个过程对用户透明,但理解这一点,你就明白为什么 ES 能轻松应对亿级数据了。


第一步:用 Kibana 创建你的第一个索引

很多新手直接往 ES 里塞数据,结果字段类型错乱、无法聚合——根源就在于没提前定义好映射(mappings)。别依赖动态映射!生产环境一定要显式声明结构。

假设我们要做一个电商商品系统,包含名称、分类、价格、库存和创建时间。来,在 Kibana 的Dev Tools > Console中输入以下命令:

PUT /product_index { "settings": { "number_of_shards": 3, "number_of_replicas": 1 }, "mappings": { "properties": { "name": { "type": "text", "analyzer": "standard" }, "category": { "type": "keyword" }, "price": { "type": "float" }, "in_stock": { "type": "boolean" }, "created_at": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss" } } } }

重点解读:

  • "name"用的是text类型,意味着会被分词。例如“无线蓝牙耳机”会被拆成“无线”、“蓝牙”、“耳机”分别建立倒排索引,支持模糊匹配。
  • "category"用的是keyword,用于精确匹配和聚合。如果你想统计“电子产品”有多少件,就必须用 keyword。
  • 时间字段记得指定 format,否则可能解析失败。
  • 分片数设为 3,适合中小规模集群;副本为 1,确保单节点故障时不丢数据。

执行成功后,你会看到响应:

{ "acknowledged": true }

说明索引已创建完成。


第二步:批量导入测试数据,别再一条条 PUT

光有结构没有数据,等于纸上谈兵。很多人习惯用PUT /index/_doc/1一条条插入,效率极低。正确的做法是使用Bulk API批量提交。

继续在 Console 输入:

POST /_bulk { "index" : { "_index" : "product_index", "_id" : "1" } } { "name": "无线蓝牙耳机", "category": "电子产品", "price": 299.9, "in_stock": true, "created_at": "2025-04-01 10:00:00" } { "index" : { "_index" : "product_index", "_id" : "2" } } { "name": "机械键盘", "category": "电子产品", "price": 599.0, "in_stock": true, "created_at": "2025-04-02 11:30:00" } { "index" : { "_index" : "product_index", "_id" : "3" } } { "name": "保温杯", "category": "生活用品", "price": 89.9, "in_stock": false, "created_at": "2025-04-02 14:20:00" }

⚠️ 注意:每一行都必须单独一行,动作行和数据行交替出现,末尾不能有多余换行。

执行后你会看到类似响应:

{ "took": 38, "errors": false, "items": [ ... ] }

只要errorsfalse,说明三条数据全部写入成功。

现在我们可以验证一下:

GET /product_index/_search

应该能看到三条文档被检索出来。


第三步:真正有用的查询 —— 不只是关键词匹配

场景一:我想找“蓝牙耳机”,哪怕只提到了其中一个词

这是典型的全文搜索需求,用match查询最自然:

GET /product_index/_search { "query": { "match": { "name": "蓝牙耳机" } } }

Elasticsearch 会自动对查询词进行分词(“蓝牙”、“耳机”),然后找出包含任意一个词的文档,并根据相关性打分_score

如果你希望两个词都必须出现,可以加operator: "and"

"match": { "name": { "query": "蓝牙耳机", "operator": "and" } }

场景二:只查“电子产品”类目,且价格在 200 到 600 之间

这类结构化筛选很常见。注意!这里有两个条件:一个是业务逻辑判断(must),另一个是范围过滤(filter)。强烈建议把不涉及评分的条件放进filter,因为它可以被缓存,性能更高。

GET /product_index/_search { "query": { "bool": { "must": [ { "term": { "category": "电子产品" } } ], "filter": [ { "range": { "price": { "gte": 200, "lte": 600 } } } ] } } }

解释一下:
-term是精确匹配,不会分词,适合 keyword 字段。
-range支持gt/gte/lt/lte,数值和日期都能用。
-bool组合让查询变得灵活可扩展。

执行后你会发现,“保温杯”被排除了,只有蓝牙耳机和机械键盘符合。


第四步:数据分析才是重头戏 —— 聚合 Aggregations

如果说查询是“找数据”,那聚合就是“看规律”。它是 Elasticsearch 成为分析引擎的核心能力。

示例 1:各类别商品数量统计

相当于 SQL 中的:

SELECT category, COUNT(*) FROM products GROUP BY category;

对应 DSL:

GET /product_index/_search { "size": 0, "aggs": { "products_by_category": { "terms": { "field": "category" } } } }

设置"size": 0表示不需要原始文档,只关心聚合结果。返回如下:

"aggregations": { "products_by_category": { "buckets": [ { "key": "电子产品", "doc_count": 2 }, { "key": "生活用品", "doc_count": 1 } ] } }

示例 2:计算平均售价

GET /product_index/_search { "size": 0, "aggs": { "avg_price": { "avg": { "field": "price" } } } }

结果大概是~329.6

示例 3:嵌套聚合 —— 每个类别的平均价格

这才是真正的“分组+统计”:

GET /product_index/_search { "size": 0, "aggs": { "by_category": { "terms": { "field": "category" }, "aggs": { "avg_price": { "avg": { "field": "price" } } } } } }

返回:

"buckets": [ { "key": "电子产品", "doc_count": 2, "avg_price": { "value": 449.45 } }, { "key": "生活用品", "doc_count": 1, "avg_price": { "value": 89.9 } } ]

你会发现,“电子产品”的均价远高于整体均值,这正是业务洞察的起点。


高阶技巧与避坑指南

✅ 最佳实践清单

技巧说明
避免动态映射陷阱字符串字段若将来要用于聚合或排序,务必声明为keyword,否则默认text无法聚合。
filter > query条件不需打分时(如 status=active),一律放filter,利用缓存提升性能。
控制返回字段使用_source过滤减少网络开销:
```json
”_source”: [“name”, “price”]
```
慎用深分页from + size超过 10000 会报错且性能差。大数据偏移推荐search_afterscroll
合理设置分片数初始主分片不宜过多(一般 1~3),后期不可改。太多会导致资源碎片化。

🔒 安全提醒

  • 生产环境严禁直接暴露 Elasticsearch 到公网。
  • 启用 X-Pack 安全模块,配置用户名密码、角色权限。
  • 删除索引、关闭集群等敏感操作应加入审批流程或限制 IP 访问。

写在最后:这些技能能带你走多远?

你刚刚完成的操作,看似简单,实则已经覆盖了90% 的日常开发场景

  • 日志分析?可以用date_histogram看每分钟错误日志增长趋势。
  • 用户行为分析?用cardinality统计独立访客 UV。
  • 商品搜索优化?结合multi_match和权重调整相关性。
  • 监控告警?把聚合结果接入 Watcher 实现异常检测。

而且,所有你在 Dev Tools 里跑通的查询,都可以无缝迁移到 Kibana 的Discover页面、Visualize图表或Dashboard大屏中长期使用。

更重要的是,你不再是一个只会点界面的使用者,而是一个能读懂 DSL、会调优性能、敢面对线上问题的工程师。


如果你正在搭建日志平台、搜索服务或运营报表系统,不妨就从今天这条PUT /product_index开始。
真正的掌控感,永远来自亲手敲下的每一行代码。

有什么问题,欢迎留言交流。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/16 7:30:12

一文说清freemodbus在工控网络中的角色定位

freemodbus:嵌入式工控通信的“隐形引擎”是如何工作的?在一条自动化生产线上,PLC 正在读取十几个传感器的温度数据,HMI 屏幕实时刷新着设备状态,而远在控制室的工程师通过 SCADA 系统远程调整参数——这些看似平常的操…

作者头像 李华
网站建设 2026/2/23 17:19:44

眼睛也会“偷懒”?调节力不足,小心近视加深、视疲劳

在数字化时代,人们日均近距离用眼时长大幅增加,不少人都有过这样的体验:长时间看书、看电子屏幕后,会出现眼睛酸胀、干涩、视物模糊等不适,这其实是眼睛在发出“预警信号”——可能是调节力不足在作祟。很多人误以为视…

作者头像 李华
网站建设 2026/2/23 5:23:25

Zynq MPSoC中VDMA与GPU协同处理核心要点

VDMA与GPU如何在Zynq MPSoC上“无缝共舞”?揭秘高效图像流水线的设计精髓你有没有遇到过这样的场景:摄像头采集的1080p视频流刚进系统,还没开始处理就卡顿了;或者CPU满载跑图像算法,结果连个UI都响应不过来&#xff1f…

作者头像 李华
网站建设 2026/2/24 8:12:45

快速理解Elasticsearch下载后的服务启动原理

深入理解 Elasticsearch 启动背后的机制:从下载到节点运行的全过程 你有没有经历过这样的场景?刚完成 elasticsearch下载 ,解压后兴奋地执行 ./bin/elasticsearch ,结果终端输出一堆日志,服务似乎“启动了”&…

作者头像 李华
网站建设 2026/2/22 19:17:04

JavaScript的同步与异步

一、开篇:为什么 JS 需要同步与异步?JavaScript 作为浏览器和 Node.js 的核心脚本语言,单线程是其天生特性 —— 同一时间只能执行一段代码。这一设计源于 JS 的核心用途:处理页面交互(DOM 操作)和网络请求…

作者头像 李华
网站建设 2026/2/20 21:53:52

小白学Python避坑指南:这些错误90%的新手都会犯

前言Python 以其简洁易读的语法,成为了众多新手踏入编程世界的首选语言。然而,即使是看似简单的 Python,在学习过程中也隐藏着许多容易让人犯错的“陷阱”。据统计,90% 的新手在学习 Python 时都会遇到一些常见的错误。本文将为小…

作者头像 李华