一、概述
Elasticsearch是一个实时(索引数据到能被搜索大概1s左右)的分布式搜索和分析引擎,主要用于全文搜索,结构化搜索以及分析。Elasticsearch (ES)是一个基于 Lucene 的开源搜索引擎,它不但稳定、可靠、快速,而且也具有良好的水平扩展能力,是专门为分布式环境设计的。
下载地址:https://www.elastic.co/downloads/elasticsearch
ES与数据库对比:
二、集群 --- Cluster
一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认就是“elasticsearch”。可以通过ElasticSearch的主配置文件elasticsearch.yml的cluster.name来指定集群名称。
三、节点 --- Node
跟集群的概念差不多,ES启动时会设置这个节点的名字,一个节点也就是一个ES得服务器。
四、索引 --- Index
索引是一类文档的集合,所有的操作比如索引(索引数据)、搜索、分析都是基于索引完成的。在一个集群中,可以定义任意数量的索引,索引也相当于是数据库中的“库”的概念
四、类型 --- Type
类型可以理解成一个索引的逻辑分区,用于标识不同的文档字段信息的集合。但是由于ES还是以索引为粗粒度的单位,因此一个索引下的所有的类型,都存放在一个索引下。这也就导致不同类型相同字段名字的字段会存在类型定义冲突的问题。
在2.0之前的版本,是可以插入但是不能搜索;在2.0之后的版本直接做了插入检查,禁止字段类型冲突。
五、文档 --- Document
文档是存储数据信息的基本单元,是一条数据记录,存在索引对象上,使用json来表示。
六、字段 --- Field
一个文档包含了若干字段,或称之为键值对。字段的值可以是简单(标量)值(例如字符串、整型、日期),也可以是嵌套结构,例如数组或对象。一个字段类似于关系型数据库表中的一列。
七、映射 --- Mapping
一个映射类似于关系型数据库中的模式定义。每个索引都存在一个映射,它定义了数据如何存放到索引对象上,需要有一个映射配置,数据类型、是否存储、是否分词。映射可以显示定义,或者在文档被索引时自动创建。
八、分片 --- Shard
当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。
当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。
九、副本 --- Replia
为提高查询吞吐量或实现高可用性,可以使用分片副本。 副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。 当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。
十、多租户
ES 的多租户简单的说就是通过多索引机制同时提供给多种业务使用,每种业务使用一个索引(关于多租户的详细定义与用途,可以参考这里)。前面我们提到过可以把索引理解为关系型数据库里的库,那多索引可以理解为一个数据库系统建立多个库给不同的业务使用。
在实际使用时,我们可以通过每个租户一个索引的方式将他们的数据进行隔离,并且每个索引是可以单独配置参数的(可对特定租户进行调优),这在典型的多租户场景下非常有用:例如我们的一个多租户应用需要提供搜索支持,这时可以通过 ES 根据租户建立索引,这样每个租户就可以在自己的索引下搜索相关内容了。