ElasticSearch基本概念
索引 Index
类似于传统RMDB的数据库,ElasticSearch的数据存储在一个或多个索引中,可以向索引写入文档或者从索引读取文档,并通过ElasticSearch使用Lucene将数据写入索引或从索引中检索数据。
文档 Document
主要实体。文档由字段构成,每个字段都有字段名以及一个或多个字段值。从客户端角度看,文档是一个JSON对象。
映射
存储ElasticSearch提供的各种特性,如排序时所需的字段内容信息、一些决定如何将输入文本分割为词条的参数、哪些词条应该被过滤掉的参数等等元信息。
类型 Type
每个文档都有对应的类型定义。一个索引中可以存储多种文档类型,并为不同文档类型提供不同的映射。8.0后逐渐弃用。
节点 Node
单个ElasticSearch服务实例为节点。
集群 Cluster
多个节点组成的系统为集群,且在ElasticSearch中配置集群很容易
分片 Shard
集群允许系统存储的数据总量超过单机容量。ElasticSearch将数据散步到多个物理Lucene索引上,而这些Lucene索引就是分片,散步分片的过程叫分片处理(sharding)。ElasticSearch自动完成分片处理,且让这些分片呈现一个大所引导样子。分片的数量在索引创建时就已经配置好,之后无法改变。
副本 Replica
副本解决了访问压力过大时单机无法处理所有请求的问题。每个分片创建冗余的副本,处理查询时可以把这些副本用作最初的主分片。
网关 Gateway
关于集群状态,索引设置的各种信息都会被收集起来,并在网关中持久化
ElasticSearch工作流程
启动过程
ElasticSearch启动时,根据配置使用广播或单播来发现同一个集群中的其他节点。集群中随意一个节点被选为管理节点(Master Node),这个管理节点负责集群的状态管理以及在集群拓扑变化时做出反应,分发索引分片到集群的相应节点上。ElasticSearch的管理节点并没有特殊地位,所有操作可以发送到任意节点,ElasticSearch内部自行处理这些操作命令,且这些命令不需要经过管理节点处理。
故障检测
对每个在预定义的超时时间内没有响应的主分片,一个新的主分片将会从原来的主分片的副本中脱颖而出。
与ElasticSearch通信
ElasticSearch假设数据由URL携带或以JSON对象传输。
- 索引数据
建索引操作只会发生在主分片上,如果索引请求发送至某个没有对应主分片只有副本的节点,这个请求会被转发到有正确的主分片的节点。下面的索引API可以创建一个文档:
curl -XPUT http://localhost:9200/blog/article/2020-7-28 -d '{"title":"Hello World!","content":"Hello ElasticSearch!","tags":["Hello","World","ElasticSearch"]}'
- 查询数据
DSL(基于JSON的可用于构建复杂查询的语言)可做到:
1、各种查询类型:词项、短语、范围、布尔、模糊、区间、空间
2、组合简单查询构建复杂查询
3、文档过滤,不影响评分的前提下抛弃不满足特定查询条件的文档
4、使用预搜索并查找与指定文档匹配的query集合
查询分两个阶段:分散阶段和合并阶段。分散阶段将query分发到包含相关文档的多个分片中去执行查询,合并则是从这些分片中收集返回结果,然后再进行合并、排序、后续处理,最后返回客户端。