ES(elasticsearch) 是一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能
elastic stack 是elasticsearch为核心的技术栈,包括beats、logstash(用作数据收集)、kibana(负责图形展示)、elasticsearch(负责数据搜索,存储等核心功能)
Lucene 是Apache的开源搜索引擎类库,也就是一个jar包,提供了搜索引擎的核心API,elasticsearch就是基于它来做的二次开发
常见的分布式搜索的技术,如下
1、Elasticsearch: 开源的分布式搜索引擎
2、Splunk: 商业项目,收费
3、Solr: Apache的开源搜索引擎
一、倒排索引
传统数据库(例如MySQL)采用正向索引,例如给下表(tb_goods)中的id创建索引
elasticsearch采用倒排索引,例如给下表(tb_goods)中的id创建索引
以下是倒排索引的搜索过程
总结
1、正向索引: 基于文档id来创建索引。查询词条时必须先找到文档,而后判断是否包含词条
2、倒排索引: 对文档内容进行分词,对词条创建索引,并记录词条所在文档的信息。查询时先根据词条
去查询文档id,然后获取到文档
3. 正向索引是逐个遍历的方式去查询,效率低
二、elasticsearch对比mysql
elasticsearch
elasticsearch是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。注意elasticsearch的文档是以json形式存储的,也就是说,我们把数据(也叫文档)存储进elasticsearch时,这些文档数据就会自动被序列化为json格式,然后才存储进elasticsearch
elasticsearch的索引: 相同类型的文档的集合。索引和映射的概念,如下图
下面的表格是介绍elasticsearch中的各个概念以及含义,看的时候重点看第二、三列,第一列是为了让你更理解第二列的意思,所以在第一列拿MySQL的概念来做匹配。例如elasticsearch的Index表示索引也就是文档的集合,就相当于MySQL的Table(也就是表)
架构
MySQL:擅长事务擅长事务类型的操作,可以确保数据的安全和一致性。一般用于增删改
Elasticsearch: 擅长海量数据的搜索、分析、计算。一般用于查询
两者是互补的关系
总结
文档:一条数据就是一个文档,es中是json格式
字段:Json文档中的字段
索引:同类型文档的集合
映射:索引中文档的约束,比如字段名称、类型
elasticsearch与数据库的关系