es一款非常强大的开源搜索引擎,能够实现在海量数据中快速检索到满足条件的数据,同时还可以实现分页、高亮显示等功能;另外,他还有日志统计、分析、系统监控等功能.
ELK技术栈
Elasticsearch :存储、搜索、分析数据
Kibana :数据可视化 ;提供了图形化界面,可以操作ES
Logstash、Beats :数据抓取
倒排索引
倒排索引是ES实现快速搜索功能的核心概念,在介绍倒排索引之前,首先得说一说什么是正向索引,正向索引就是先通过文件名找到具体的文件,再获取文件中的内容过程,mysql的查询功能就是正向索引的思想,先根据ID查询记录,再从记录中获取相关字段的数据.
倒排索引就是从文件的内容查找,得到包含这些内容的文件列表,再得到文件对应的信息,如文件名、作者、文件大小、创建时间等:
1、将文档的内容通过算法进行分词,得到一个词条列表
2、将词条列表当作key,包含该词条的文档id列表作为值,形成一张表
3、词条是唯一的,所以给词条创建索引,提高搜索效率
4、通过词条查询,得到文档ID,再通过文档ID查询到具体的文档
总的来说,就是把文档内容进行分词,得到一个词条表【词条:文档ID列表】,给词条创建索引。把要搜索的内容进行分词,根据分词后的结果去词条表中根据词条进行匹配,得到文档ID列表,再通过文档ID返回具体的文档信息;
整个搜索过程分为如下几步 :对搜索的内容进行分词; 基于内容搜索到相关的文档ID; 再通过文档ID找到对应的文档; 展示你要展示的文档数据.
ES相关概念对比MySQL
Index: 索引, 就是文档的集合, 类似数据库的表(table);
Document: 文档, 就是一条条的数据, 类似数据库中的行(Row), 文档都是json格式;
Field: 字段, 就是JSON文档中的字段, 类似数据库中的列(Column);
Mapping: 映射, 是索引文档的约束, 例如字段类型约束, 类似数据库中的表结构(Schema);
DSL: 是elasticsearch提供的JSON风格的请求语句, 用来操作elasticsearch, 实现CRUD.