Elasticsearch 简明教程

Elasticsearch - Basic Concepts

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

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

General Features

Elasticsearch 的一般特性如下 −

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

  2. Elasticsearch 可以用作 MongoDB 和 RavenDB 等文档存储器的替代品。

  3. Elasticsearch 使用非规范化来改进搜索性能。

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

  5. Elasticsearch 是一个开源软件,并根据 Apache 许可证版本 2.0 提供。

Key Concepts

Elasticsearch 的主要概念如下 −

Node

这是指 Elasticsearch 的单个运行实例。单个物理和虚拟服务器可容纳多个节点,具体取决于其物理资源(如 RAM、存储和处理能力)的功能。

Cluster

这是由一个或多个节点组成的。群集为所有节点提供跨整个数据的集体索引和搜索功能。

Index

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

Document

这是按照 JSON 格式定义的特定方式中的字段集合。每个文档都属于一个类型并且驻留在索引中。每个文档都与一个称为 UID 的唯一标识符关联。

Shard

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

Replicas

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

Advantages

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

  2. Elasticsearch 是实时的,换句话说,添加的文档在这一秒之后就可以用此引擎搜索。

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

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

  5. 与 Apache Solr 相比,在 Elasticsearch 中处理多租户非常容易。

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

  7. Elasticsearch 支持几乎所有文档类型,但不支持不支持文本渲染的文档类型。

Disadvantages

  1. Elasticsearch 在处理请求和响应数据方面(仅在 JSON 中可行)不支持多语言,这与 Apache Solr 不同,Apache Solr 中可以使用 CSV、XML 和 JSON 格式。

  2. 有时,Elasticsearch 存在 split brain 情况问题。

Comparison between Elasticsearch and RDBMS

在 Elasticsearch 中,索引类似于 RDBMS(关系数据库管理系统)中的表。每个表都是一组行,正如每个索引都是 Elasticsearch 中一组文档。

下表给出了这些术语之间的直接比较:

Elasticsearch

RDBMS

Cluster

Database

Shard

Shard

Index

Table

Field

Column

Document

Row