Skip to main content

es

什么是Elasticsearch

Elasticsearch是一个开源的分布式搜索引擎,用于全文检索、分析和可视化大规模数据。它提供了简单的RESTful API,适用于各种类型的数据搜索应用。

ES的主要组件是什么

Elasticsearch(ES)是一个分布式搜索引擎和数据分析引擎,其主要组件包括以下几个部分:

  1. 节点(Node):

    • 节点是Elasticsearch集群的基本单元。
    • 每个节点是一个运行的Elasticsearch实例,负责存储数据、执行搜索和分析操作。
    • 集群由多个节点组成,可以水平扩展,提高性能和容量。
  2. 索引(Index):

    • 索引是文档的逻辑容器,类似于关系数据库中的表。
    • 文档被索引到特定的索引中,每个索引可以包含多个文档,定义了文档的数据结构和配置。
    • 索引可以分为多个分片,用于分布数据和提高性能。
  3. 文档(Document):

    • 文档是索引中的基本数据单元,以JSON格式表示。
    • 每个文档都有一个唯一标识符,可以通过该标识符进行检索。
    • 文档包含了字段和对应的值,类似于关系数据库中的行。
  4. 分片(Shard):

    • 分片是索引的物理划分,用于分布数据在集群的不同节点上。
    • 每个索引可以被划分为一个或多个主分片,每个主分片可以有若干个副本。
    • 分片的存在提高了搜索性能、容错性和可扩展性。
  5. 倒排索引(Inverted Index):

    • 倒排索引是Elasticsearch中用于实现高效文本搜索的核心数据结构。
    • 它将文档中的每个词项映射到包含这些词项的文档列表。
    • 倒排索引使得Elasticsearch能够快速定位包含特定词项的文档。
  6. 查询(Query):

    • 查询是用于从Elasticsearch中检索文档的搜索条件。
    • 查询可以包括简单的条件,如匹配特定词项,也可以是复杂的布尔查询、范围查询等。
    • Elasticsearch提供了丰富的查询DSL(Domain-Specific Language)来支持各种查询需求。
  7. 聚合(Aggregation):

    • 聚合是用于对搜索结果进行数据分析的机制。
    • 它可以提供各种统计信息,如总和、平均值、最大值、最小值等。
    • 聚合可以用于构建复杂的数据分析和可视化应用。
  8. 映射(Mapping):

    • 映射定义了索引中每个字段的数据类型和属性。
    • 它告诉Elasticsearch如何存储和处理文档中的各个字段。
    • 映射可以是隐式的(动态映射)或显式的(静态映射)。
  9. 集群(Cluster):

    • 集群是由多个节点组成的Elasticsearch环境,协同工作以提供高性能和高可用性。
    • 集群中的节点可以通过主节点和数据节点的角色来分工,主节点负责管理集群状态,数据节点负责存储和处理数据。
  10. 主节点(Master Node)和数据节点(Data Node):

    • 主节点负责管理集群状态、进行索引的创建和删除等管理任务。
    • 数据节点存储实际的索引数据,并执行搜索和分析操作。
    • 一个节点可以同时担任主节点和数据节点的角色,也可以专注于其中一种。

ES如何存储数据

ES在分布式环境中工作,索引是逻辑存储对象,类似于关系型存储数据库中的表。

同一个逻辑索引会按日期进行划分,这样可以方便按时间范围进行查询。比如日志索引可以是:

  • log-20240101
  • log-20240102

在一个物理索引中,会根据配置进行分片,每一个分片都会存储部分物理数据。分片包括主分片和备份分片,每一个分片由一个至多个分段组成,这些分段记录有文档数据,文档数据以JSON形式存储,同时文档也是ES中基本数据单元。

因此,索引是文档的逻辑集合,分片是索引的物理划分。

什么是ALias

Alias是ES中索引的别名,通过指定别名,可以简化索引的维护。

ES一次查询会发生什么

ES是工作在分布式环境下的,查询前需要指定索引及查询条件。在存储阶段,ES会将索引划分成多个分片,并将他们分布在各个节点上。

因此在查询过程中,查询请求会分发给各个节点服务,节点会基于查询条件将请求定位到相关的分片上,最终将结果合并返回给用户。

如何理解ES的近实时搜索

在ELK中,服务端的日志输出后,可以很快的被ES收集并在Kibana上进行展示。这就是ES的近实时搜索功能,所以这里的近实时并不是绝对的实时,而是有几秒到几分钟的延迟。

当整体来看速度是很快的,这里涉及到索引缓存的刷新。即当临时存储区域,实时的文档会被写入到此区域,当满足一定条件后会触发刷盘,此时文档数据会被刷新到磁盘上的分段中。