Elasticsearch 基础概念



Elasticsearch 是一个基于 Apache Lucene 的搜索服务器。它由 Shay Banon 开发,并于 2010 年发布。现在由 Elasticsearch BV 维护。其最新版本为 7.0.0。

Elasticsearch 是一个实时分布式且开源的全文搜索和分析引擎。它可以通过 RESTful 网络服务接口访问,并使用无模式 JSON(JavaScript 对象表示法)文档来存储数据。它基于 Java 编程语言构建,因此 Elasticsearch 可以在不同的平台上运行。它使用户能够以非常高的速度探索海量数据。

一般特性

Elasticsearch 的一般特性如下:

  • Elasticsearch 可扩展到 PB 级的结构化和非结构化数据。

  • Elasticsearch 可用作 MongoDB 和 RavenDB 等文档存储的替代品。

  • Elasticsearch 使用反规范化来提高搜索性能。

  • Elasticsearch 是流行的企业搜索引擎之一,目前已被许多大型组织使用,例如维基百科、卫报、StackOverflow、GitHub 等。

  • Elasticsearch 是开源的,并根据 Apache 许可证 2.0 版提供。

关键概念

Elasticsearch 的关键概念如下:

节点 (Node)

它指的是 Elasticsearch 的单个运行实例。单个物理和虚拟服务器根据其物理资源(如 RAM、存储和处理能力)容纳多个节点。

集群 (Cluster)

它是⼀个或多个节点的集合。集群为所有节点提供跨所有数据的集体索引和搜索功能。

索引 (Index)

它是不同类型文档及其属性的集合。索引还使用分片的概念来提高性能。例如,⼀组文档包含社交网络应用程序的数据。

文档 (Document)

它是以 JSON 格式定义的特定方式排列的字段的集合。每个文档都属于⼀种类型,并驻留在索引内。每个文档都与⼀个称为 UID 的唯一标识符关联。

分片 (Shard)

索引被水平细分为分片。这意味着每个分片包含文档的所有属性,但包含的 JSON 对象数量少于索引。水平分离使分片成为独立的节点,可以存储在任何节点中。主分片是索引的原始水平部分,然后将这些主分片复制到副本分片。

副本 (Replicas)

Elasticsearch 允许用户创建其索引和分片的副本。复制不仅有助于在发生故障时提高数据的可用性,而且还通过在这些副本中执行并行搜索操作来提高搜索性能。

优势

  • Elasticsearch 是基于 Java 开发的,使其几乎兼容所有平台。

  • Elasticsearch 是实时的,换句话说,添加的文档一秒钟后即可在这个引擎中搜索到。

  • Elasticsearch 是分布式的,这使得它易于扩展和集成到任何大型组织中。

  • 使用 Elasticsearch 中存在的网关概念,可以轻松创建完整的备份。

  • 与 Apache Solr 相比,Elasticsearch 更容易处理多租户。

  • Elasticsearch 使用 JSON 对象作为响应,这使得可以使用大量不同的编程语言来调用 Elasticsearch 服务器。

  • Elasticsearch 支持几乎所有文档类型,除了不支持文本渲染的那些类型。

劣势

  • Elasticsearch 不像 Apache Solr 那样支持多语言(仅限于 JSON 格式),在处理请求和响应数据方面不支持多语言(仅限于 JSON 格式),而 Apache Solr 支持 CSV、XML 和 JSON 格式。

  • 有时,Elasticsearch 会出现脑裂的情况。

Elasticsearch 和 RDBMS 的比较

在 Elasticsearch 中,索引类似于 RDBMS(关系数据库管理系统)中的表。每个表都是行的集合,就像每个索引都是 Elasticsearch 中文档的集合一样。

下表对这些术语进行了直接比较:

Elasticsearch RDBMS
集群 (Cluster) 数据库
分片 (Shard) 分片 (Shard)
索引 (Index)
字段
文档 (Document)
广告
© . All rights reserved.