初识ElasticSearch
一、了解ES
1.1 什么是 ElasticSearch
1、ElasticSearch 是一款非常强大的开源搜索引擎,可以帮助我们从海量的数据中快速的找到需要的内容。
2、ElasticSearch 结合 Kibana、Logstash、Beats、也就是Elastic Stach(ELK)。被广泛应用在日志数据分析、实时监控等领域。
3、ElasticSearch 是Elastic Stack 的核心,负责存储、搜索、分析数据。
1.2 ElasticSearch 的发展
1、Lucene 是一个 Java 语言的搜索引擎类库,是 Apache 公司的顶级项目,由 DougCutting 于1999年研发。
官网地址:https://lucene.apache.org
2、Lucene 的优势:易扩展、高性能(基于倒排索引)
3、Lucene 的缺点:只限于 Java 语言使用、学习曲线陡峭、不支持水平扩展
4、2004年基于 Lucene 开发了 Compass,2010年重写 Compass ,取名为 ElasticSearch。
相比 Lucene ,ElasticSearch 具有以下优势:
- 支持分布式,可水平扩展
- 提供 Restful 接口,可被任何语言调用
二、倒排索引
2.1 正向索引与倒排索引
传统数据库(如Mysql)采用正向索引,例如:如下表(tb_goods)中的 id 创建索引:
基于文档 id 创建索引,查询词条时必须先找到文档,而后判断是否包含词条。
ElasticSearch 采用倒排索引:
- 文档(document): 每条数据就是一个文档
- 词条(term): 文档按照语义分成的词语
对文档内容分词,对词条创建索引,并记录词条所在文档的信息。查询时先根据词条查询到文档 id,而后获取文档。
三、ES 基本概念
3.1 文档
1、ElasticSearch 是 面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。
2、文档数据会被序列化为 json 格式后存储在 ElasticSearch 中。
3.2 索引
1、索引(index): 相同类型的文档的集合。
2、映射(mapping):索引中稳定的额字段约束信息,类似表的结构约束。
3.3 概念对比
3.4 架构
Mysql:擅长事务类型的操作,可以确保数据的安全性和一致性。
ElasticSearch:擅长海量数据的搜索、分析、计算