Elasticsearch-介绍

Elasticsearch介绍,包括文档与索引、倒排索引、搜索和分析、可伸缩和弹性(节点、分片、跨集群复制)。
内容大部分源自官方文档第一节“What is Elasticsearch?”
基于7.11版本。

Elasticsearch是一个分布式搜索和分析引擎,为所有类型的数据提供了近实时的搜索和分析。不仅可以进行简单的数据探索,还可以汇总信息来发现数据中的趋势和模式。随着数据和查询量的增长,分布式特性可以使部署顺畅的无缝的增长。

1. 文档和索引

文档(Document)

Elasticsearch是分布式文档存储,它不会将信息存储为“行-列”数据结构,而是存储为JSON文档的数据结构。当一个集群中有多个节点时,存储的文档分布在集群中,并且可以从任何节点访问。

Elasticsearch使用倒排索引的数据结构,支持非常快速的全文本搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。

索引(Index)

索引是一个逻辑命名空间,可以看作是文档的优化集合,每个文档都是字段的集合。默认Elasticsearch对每个字段中的所有数据建立索引,并且每个索引字段都具有专用的优化数据结构。如:文本字段存储在倒排索引中,数字、地理字段存储在BKD树中。

Elasticsearch还支持动态映射(dynamic mapping),自动检测并向索引添加新字段。可以定义规则来控制动态映射,也可以显式定义映射以完全控制字段的存储和索引方式。

显式定义映射的意义:

  • 区分全文本字符串字段和精确值字符串字段
  • 执行特定语言的文本分析
  • 优化字段进行部分匹配
  • 自定义日期格式
  • 无法自动检测到的数据类型,如地理信息

为不同的目的以不同的方式对同一字段建立索引通常很有用。

倒排索引(inverted index)

倒排索引的结构,适用于快速的全文(Text)搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。

倒排索引建立的是分词(Term)和文档(Document)之间的映射关系,在倒排索引中,数据是面向词而不是面向文档的。

  • Term(词):精准值,foo、Foo是不相同的词
  • Text(文本):非结构化文本,默认文本会被解析为词,这是索引中实际存储的内容

Elasticsearch索引存储结构图:
在这里插入图片描述

一个索引包含很多分片,一个分片是一个Lucene索引,它本身就是一个完整的搜索引擎,可以独立执行建立索引和搜索任务。

Lucene索引又由很多分段组成,每个分段都是一个倒排索引。 Elasticsearch每次refresh都会生成一个新的分段,其中包含若干文档的数据。

每个分段(Segment)内部,文档的不同字段被单独建立索引。每个字段的值由若干词(Term)组成。

词(Term)是原文本内容经过分词器处理和语言处理后的最终结果。

2. 搜索和分析

搜索(Search)

Elasticsearch提供了一个简单,一致的REST API,用于管理集群以及建立索引和搜索数据。
REST APIs支持结构化查询、全文本查询和结合了两者的复杂查询。

  • 结构化查询:类似于SQL构建的查询,按索引中搜索字段,然后按字段对匹配项进行排序。
  • 全文本查询:查找到所有与查询字符串匹配的文档,按相关性对它们进行排序。

可以使用Elasticsearch的全面JSON风格的查询语言(Query DSL)访问所有这些搜索功能。还可以构造SQL风格的查询来在Elasticsearch内部本地搜索和聚合数据。

分析(Analyze)

聚合使您能够构建数据的复杂摘要,并深入了解关键指标,模式和趋势。聚合利用了用于搜索的相同数据结构,速度很快,可以实时分析和可视化数据。聚合操作和搜索的请求在一起运行,可以在单个请求中同一时间相同的数据进行搜索文档,过滤结果并执行分析。

3. 可伸缩和弹性

集群(Cluster)

一个Elasticsearch集群由一个或多个节点(Node)组成,每个集群都有一个cluster name作为标识。

集群的三种状态:

  • Green:所有主分片和副本分片都准备就绪。数据不会丢失
  • Yellow:所有主分片准备就绪,但至少一个主分片对应的副本分片没有就绪。意味着高可用和容灾能力下降
  • Red:至少有一个主分片没有就绪。此时查询的结果会出现数据丢失

Elasticsearch可以根据需要进行扩展,它天生就实现了分布式。你可以向集群添加节点以增加容量,它会自动将数据和查询负载分布到所有可用节点,不需要大改应用程序。

Elasticsearch索引只是一个或多个物理分片的逻辑分组,其中每个分片实际上是一个独立的的索引。通过将文档分布在索引中的多个分片上,并将这些分片分布在多个节点上,当集群增长(或缩小)时,Elasticsearch自动迁移分片以平衡集群。

节点(Node)

节点是属于集群的运行实例,测试时可以一个服务器上启动多个节点,线上通常一个服务器只有一个实例。

启动时,节点将使用单播来发现具有相同集群名称的现有集群,并尝试加入。

  • 候选主节点(Master-eligible Node)
  • 主节点(Master Node)
  • 数据节点(Data Node)
  • 协调节点(Coordinating Node)
  • 热节点(Hot Node)
  • 冷节点(Warm Node)
  • 预处理节点(Ingest Node)

分片(Shard)

分片是单个Lucene实例。这是一个低级的工作单元,由ElasticSearch自动管理,在节点发生故障或新增时,可以自动的将分片从一个节点移动到另一个节点。分为主分片(primaries)和副本分片(replicas)两种类型。

  • 主分片:建立索引时默认会有一个主分片,每个文档都属于一个主分片,创建索引后,主分片数量是固定的无法更改。
  • 副本分片:每个主分片可以有零个或多个副本,可以随时更改,副本永远不会和主分片在同一节点上启动。副本提供数据的冗余副本,以防止硬件故障,并增加处理像搜索或检索文档这样的读请求的能力。

跨集群复制(Cross-cluster replication)

出于性能原因,群集中的节点必须位于同一网络上,跨不同数据中心中的节点在群集中平衡分片的时间太长了。但是这不符合高可用架构的要求,跨群集复制(CCR)可以解决单个集群重大故障问题。

CCR提供了一种将主集群的索引自动同步到次要远程集群的方法,次要远程集群可以作为热备份。如果主集群失败,次要集群可以接管。您还可以使用CCR创建次要集群,以满足用户在地理位置上接近的读请求。主集群上的索引是Leader,负责所有写请求,复制到次要集群上的索引是只读的Follower。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值