分布式搜索引擎-elasticsearch

1. elatsticsearch(简写为es)是什么

它是一个实时的分布式、开源的全文本查询和分析引擎,基于java语言开发。

2. es可以做什么

它可以在SPA(single page application-单页应用)中被使用,为用户提供高速的数据查询和分析。且原生支持java应用。

3. 主要特性

它有如下几个主要特性:

  • 可拓展性强,支持高达千兆字节(GB)的数据(不管是结构性的还是非结构性的);
  • 可以作为类似MongoDB和RavenDB等文档存储数据库的替代品;
  • 使用非规范化来提高搜索性能;
  • 企业级的搜索引擎,被大型公司广泛使用;
  • 开源工具,且使用Apache许可证。

4. 关键性的概念

  • 节点:表示单个运行的es实例,es可以在单台服务器上运行多个实例,这完全取决于服务器的物理内存和处理器能力;
  • 集群:一个或者多个节点的集合,在逻辑上提供了集中的数据索引和查询能力,通常表现在横跨多个节点获取完整数据的能力。
  • 索引:不同类型的文档和他们的属性的集合。在关系型数据库中,索引一般用于提升查询性能。
  • 文档:一个使用JSON格式定义的字段集合,而这些字段定义了数据查询的规则。每个文档都属于一种类型并驻留在索引中,每个文档都与一个称为 UID 的唯一标识符相关联。
  • 分片:索引被横向拆分成不同的分片,这意味着每个分片包含了所有的文档属性,但包含的 JSON 对象数量少于索引。水平分离使分片成为一个独立的节点,且可以存储在任何节点,主分片是索引的原始水平部分,然后将这些主分片复制到副本分片中。
  • 副本:es允许用户创建索引和分片的副本。复制不仅有助于在发生故障时提高数据的可用性,而且通过在这些副本中执行并行搜索操作来提高搜索性能。

5. es的优势

  • es 是基于 Java 开发的,这使得它几乎可以兼容所有平台;
  • es 是实时的,也就是说一秒后添加的文档就可以在这个引擎中搜索了;
  • es 是分布式的,这使得它可以轻松地在任何大型组织中扩展和集成。
  • 使用 es 中的网关概念可以轻松创建完整备份。
  • 与 Apache Solr 相比,在 es 中处理多租户非常容易。
  • es 使用 JSON 对象作为响应,这使得使用大量不同的编程语言调用 es 服务器成为可能。
  • es 支持几乎所有文档类型,除了那些不支持文本渲染的文档类型。

6. es的缺点

  • 与 Apache Solr 不同,es 在处理请求和响应数据方面没有多语言支持(仅支持JSON),而Apache Solr 可以支持 CSV、XML 和 JSON 格式。
  • 偶尔,es 会出现**脑裂(Split brain)**的问题。(什么是脑裂)

7. es和关系数据库之间的区别

在 es 中,索引类似于 RDBMS(关系数据库管理系统)中的表。 每个表都是行的集合,就像 es 中的每个索引都是文档的集合一样。
下表给出了这些术语之间的直接比较 -

es RDBMS
集群 数据库
分片 分片
索引
字段
文档