一、什么是ES?
- 是一个分布式、Restful风格的搜索和数据分析引擎
- 高性能、高可扩展性,支持PB级数据
- 支持准实时查询,是搜索引擎的首选
- 底层基于lucene,基于java实现
二、ES的功能?适用场景?
- 检索数据: 对于海量数据的应用,一般关系型数据库检索问题一直是噩梦,ES就算为解决它而生,有了它快速搜索不再是开发者头痛的难题
- 分布式存储:相对于传统存储解决方案,ES提供的分片、持久化方案,既比关系型类型数据库速度快、又比缓存数据库(如REDIS等)存的多、持久化也更好
- 数据分析: ES结合Logstash、Kibana 构成大名鼎鼎的ELK,实时大规模的日志收集、分析和展示,让用户可以多维度对日志实现分析、查询和管理。
三、什么是倒排索引?
我们可以先回忆一下正排索引:在使用正排索引的数据库中,我们要搜索一个词在哪些文档里出现了,我们需要对所有文档依次遍历,检查其中是否包含这个词。这样的搜索效率非常低,于是就出现了倒排索引。
倒排索引(Inverted Index)在建立的过程中,首先将一个文档分词,即把文档切分成一个个单词,然后记录这一个个分词具体属于哪些文档,将这种映射关系合成一个列表,这个列表就是倒排索引。
例如:我们要存入以下三条文档
那么可以建立如下倒排索引:
正排索引是根据文档去找词,倒排索引是根据词去找文档,倒排索引在进行全文检索时十分高效。
四、安装并运行Elasticsearch
官方教程:Getting started with Elasticsearch
五、基本概念
**集群(Cluster):**一个集群是由一个或多个节点组成,通过所有的节点一起保存文档并提供联合索引和搜索功能。每个集群有一个唯一的名称标识,默认是“elasticsearch”。
**节点(Node):**一个节点是一个单一的服务器
**索引(Index):**相当于MySQL中的Database,用于存储、管理文档
**分片(Shard):**一个索引被拆成多个分片,分布在不同的节点上,构成分布式搜索。一个索引被分成多少个分片,需要在索引创建时指定,且在创建后不能更改
**副本(Replica):**一个索引被拆成多个分片后,每个分片都会有一到多个复制的副本。副本的作用一是提高系统的容错性,二是提供负载均衡的功能,提高es的查询效率