前言
Elastic search(es)是目前使用最广的搜索引擎,是elastic stack技术栈的核心,感觉es最大的功能就是提供全文搜索以及快速的查询能力,本章对es的学习分析是基于es官方文档和一些博客的总结分析,elasticsearch的安装很简单,下载官网的使用平台的安装包就可以了。
概念解释
es中一些名词概念是非常重要的,如果没弄明白这些名词的含义,会对学习es带来极大的困扰,本节基于官方文档,罗列了一下重要名词概念:
index
index-索引,很多文章都将index类比于关系型数据库的 数据库 概念,在实际使用的时候,觉得这种说法基本合理,但随着es6之后逐渐废除type(类比数据库的表,下文会讲)的概念,现在笔者更倾向于认为index 类比于表的概念。 官方文档中描述index是An index is a collection of documents that have somewhat similar characteristics., 就是document的集合。然后需要注意一个地方,文档中明确index的命名必须全部小写。
type
type的作用是在一个index中,为不同的document进行分类,也就是一个index可以有多个分类(type),type再对应同一分类的document。但在es6之后,逐渐废弃了这种type的概念,基本现在是一个index一个type(默认是_doc)。
document
document就是一条数据,但使用json表示的数据。
field
field就是document的一个字段,json中的一个key-value。
先对上面几个概念进行一下总结,参考下图(没有type的概念)。
cluster
cluster集群的概念很常见,es是十分适合分布式的,只要node节点配置是设置的cluster name相同就是同一个集群下的(默认的cluster name是elasticsearch),非常方便。数据是存储在集群中,也就是多个node(服务器)上,整个cluster共维护存储了index。
node
node就是cluster中的一个节点,一般就是一台服务器,node的名称默认是uuid生成。
shards&replicas
shards分片也是分布式数据存储常见的概念,shards就是es中数据存储数据块。对于一个index,es允许有多个shards,分片数的设定可以在index创建的时候指定,一般会选择shards<=nodes。另外,每一个shards都是一个完整的Lucene index。 官方文档中强调了使用shards的两点重要原因:
- 可以分割index,提高数据的存储量。
- 一次查询,可以并行去不同shards中搜索,提高吞吐量和搜索性能。
replicas是复制的意思,es用了主分片(primary shards)和副分片(replicas)的方式来实现高可用。副分片就是主分片的拷贝,在网络异常,主分片所在的node挂了的时候,副分片提供服务,这是很常见的高可用方案,主分片和副分片不在同一个node上。官方文档中也强调了使用replicas的两点重要原因:
- 高可用。
- 搜索可以在所有分片上并行进行,所以可以提高吞吐量和搜索性能。
还有一点是,shards和replicas可以在index创建的时候指定个数,也可以在运行中任意时候改变,但推荐在index创建的时候指定;默认创建一个index,会有一个一主一副的shards(另一个可能是UNASSIGNED状态)。