介绍 Elastic Stack
包含以下4个部分:
- Elasticsearch:一个基于 JSON 的分布式搜索和分析引擎。
- Kibana:是 Elastic Stack 的窗户,探索数据并管理堆栈。
- Beats:是一个面向轻量型采集器的平台,这些采集器可从边缘机器发送数据。
- Logstash:是动态数据收集管道,拥有可扩展的插件生态系统。

核心部分——Elasticsearch: 提供了数据存储、搜索和分析;
Kibana: 提供了数据可视化和Elasticsearch的管理功能;
Beats和Logstash: 提供了数据摄取功能,Beats是一个轻量级的数据摄取工具,Logstash提供了类似与ETL(Extract-Transform-Load)的功能。
基于 Elastic Stack 可以构建很多的解决方案,包括:日志、指标、应用性能监控、健康状态监控、安全分析、应用搜索、网站搜索、企业搜索、地图、商业分析等。
Elastic Stack 支持多种部署方式,既可以在共有云上部署对外提供SaaS服务,也能够自我管理(包括Elastic Cloud Enterprise 和 Standalone)。
Elasticsearch 特点
- 可扩展
- 实时:很好地支持了实时搜索和分析
- 高可用:内置了高可用性
- 开发者友好:基于 json 文档,对开发者者友好
- 多样的存储
- 搜索和聚合
安装部署 Elasticsearch & Kibana
多种方式:
- 使用软件介质安装部署
- 在容器环境下的安装和部署
安装 Elasticsearch
进入官网,点击免费使用进行下载页面,再进入 Elasticsearch 的下载页面,可参考页面上的 Installation Steps, 其中也有关于容器环境下的安装部署。
本文安装指令
1 | 下载deb包 |
运行 Elasticsearch
1 | cd /usr/share/elasticsearch/bin |
安装 Kibana
进入 kibana 的下载页面,可参考页面上的 Installation Steps,其中也有关于容器环境下的安装部署。
本文的安装指令
1 | 下载deb包 |
安装过程中提示需要重启才能完整安装完毕,所以一定要重启系统!!!
运行 kibana
1 | 1. 配置 kibana,进入配置文件夹 |


Dev Tool
本文演示通过 Kibana 的 Dev Tool,这是一个交互式命令控制台(左边输入命令,右边显示结果),可方便地进行脚本调试、测试和配置等工作。
方便的基本操作指令有:
1 | // 工具能自动补齐 |
备用下载地址
有时下载 ElasticSearch 和 Kibana 安装包过于漫长,这里提供了一个本文用到的安装文件的备用下载地址百度网盘,提取码: cp7h,共有如下4个文件。

使用 JSON 格式的文档
通常使用 JSON 格式的文档与 Elasticsearch 进行交互
JSON 文档常见格式:
1 | { |
增删改查 CRUD
单文档增删改查
增加
Elasticsearch 是基于倒排索引的
1 | // 从版本6以后一个 index 只能对应一个 type |
查找
1 | GET twitter/_doc/1 |
更新
1 | // 按照文档 id 更新 |
删除
1 | DELETE twitter |
批量文档增删改查
bulk 增加
1 | POST _bulk |
bulk 增加导致映射错误
问题:ES 插入6个文档时,自动触发了 mapping,也被叫做 dynamic mapping。有时候 dynamic mapping 会导致有些字段未能映射正确,比如上方的 location 属性未被映射为 geo_point(地理位置信息字段), 而是被映射为了 text。
解决方法:
1 | // 1. 删除该索引 |
查找所有
1 | // 查看批量插入是否成功 |
带条件查找
找到所在城市为北京的人
1 | GET twitter/_search |
使用 bool 进行查询
1.must
must 类似于 sql 中的 and
1 | // 在北京且年龄为30岁的人 |
2.must not
1 | // 不在北京的人 |
3.should
should 类似于 sql 中的 or
1 | // 在北京或上海的人 |
用 _count 统计个数
1 | // 在北京和上海的人的个数 |
复杂查找:按地理位置信息
1 | // 在北京且距离某一固定范围内的人,并排序 |
范围查询
1 | // 查询年龄大于等于20小于等于30的人,并降序排序 |
按指定字段查询
1 | // 查询并将命中字段高亮显示 |
映射 Mapping
Elasticsearch 中的 Mapping 对应关系型数据库中的库表结构
查看 mapping 信息
1 | // 检查文档的 mapping 信息,类似于数据库中的表 |
聚合操作
range
类似于 sql 中的 >= 和 <=
1 | // 下面的 size 表示命中信息的显示个数 |
term
类似于 sql 中的 group by
1 | GET twitter/_search |
put twitter/_mapping 中也可以添加 analyzer,默认是 standard
例如:
1 | PUT twitter/_mapping |
simple 分词器
1 | GET twitter/_analyze |
自定义分词并转小写
1 | GET twitter/_analyze |
附:kibana 页面快捷键
| 快捷键 | 描述 |
|---|---|
| Ctrl/Cmd + I | 自动格式化 |
| Ctrl/Cmd + / | 打开帮助文档 |
| Ctrl + Space | 自动补全 |
| Ctrl/Cmd + Enter | 执行代码 |
| Ctrl/Cmd + Up/Down | 将光标切换到上/下一段代码(注:这里与 chrome 切换标签页的快捷键重复) |
| Ctrl/Cmd + Alt + L | 折叠/展开当前域(注:测试无效) |
| Ctrl/Cmd + Option + 0 | 关闭所有域除了当前域,组合键再加 shift 可展开 |
| Down arrow | 自动提示有多个选项时进行选择 |
| Enter/Tab | 直接补全最常用提示代码 |
| Esc | 暂停编辑区工作 |
附:官方辅助资料
ElasticSearch 7 新版本正在被广泛使用