Elasticsearch 入门必读

419 阅读5分钟

Elasticsearch 是啥?

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它集中存储数据,帮助发现意料之中以及意料之外的情况。

Elasticsearch 的特性

  • 快速获得结果
    • 如果您能够立即获得答案,您与数据的关系就会发生变化。这样您就有条件进行迭代并涵盖更大的范围。
  • 强大的设计
    • 但是要达到这样的速度并非易事。我们通过有限状态转换器实现了用于全文检索的倒排索引,实现了用于存储数值数据和地理位置数据的 BKD 树,以及用于分析的列存储。
  • 无所不包
    • 而且由于每个数据都被编入了索引,因此您再也不用因为某些数据没有索引而烦心。您可以用快到令人惊叹的速度使用和访问您的所有数据。

Elasticsearch 的缺点

  • Elasticsearch 可能会出现裂脑情况的问题;
  • 与 Apache Solr 不同,Elasticsearch 不支持处理请求和响应数据的多语言;
  • 与 MongoDB、Hadoop 等其他选项相比,Elasticsearch 不是一个好的数据存储。它在小型用例中表现良好,但在每天传输 TB 数据的情况下,它要么阻塞要么丢失数据;

ElasticSearch 与 Solr 的对比

  • Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
  • Solr 支持更多格式的数据,而 Elasticsearch 仅支持 Json 文件格式;
  • Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;
  • Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch;

使用场景

  • 存储和分析由不同系统生成的日志的工具;
  • 采集和组合公共数据;
  • 全文搜索;
  • 数据分析,指标分析;

关键概念

节点(Node)

节点是 Elasticsearch 的一个实例,用于存储数据。它在 Elasticsearch 实例开始运行时创建。简单来说,它指的是一个正在运行的 Elasticsearch 实例。出于管理目的,节点由其名称标识。

集群

集群是一组一个或多个节点,它们一起工作以保存数据。集群为整个数据提供跨所有节点的搜索功能和联合索引。基本上,它是一组运行 Elasticsearch 引擎的系统。

类似于节点,它也由一个名称标识以用于管理目的。集群的默认名称是 elasticsearch。

文档(Document)

该文档是以独特方式的字段集合,以 JSON 格式定义。它用于存储驻留在 Elasticsearch 索引中的数据。所以,它可以被索引。每个文档都属于一种类型并与唯一标识符(UID) 相关联。它以 JSON(键: 值)对表示。在 RDBMS 中,文档表示为表中的一行。

索引(Index)

索引是一组不同类型的文档。它有助于执行搜索、更新和删除操作以及索引。在关系数据库中,索引表示为表,这意味着索引类似于 RDBMS 中的表。

Elasticsearch 允许在单个集群中定义各种索引。为了提高性能,索引使用了分片的概念。

分片(Shard)

使用集群可以存储大量数据,但可能会超出单个服务器的容量。为了克服这个问题,Elasticsearch 允许将您的索引分成几个部分,称为 shard。因此,将您的索引分成几部分以创建分片。您可以在创建索引时定义所需的分片数量。

创建索引时,可以定义所需的分片数量。每个分片都是独立的且功能齐全。

副本

副本是分片的附加副本。它们像分片一样执行查询。 Elasticsearch 使用户能够创建其索引和分片的副本。

Elasticsearch 提供副本以避免任何类型的故障,并有助于在出现故障时提高数据的可用性。故障可能类似于-节点或分片由于某种原因将脱机。复制不仅增加了数据的可用性,还通过在这些副本中执行并行搜索操作来提高搜索的性能。

映射(Mapping)

在 Elasticsearch 中,每个索引都有一个与之关联的映射,这是索引中每个单独文档可以保存的数据的模式定义。映射可以自动完成,也可以为索引手动创建。数据推送到索引时,会自动添加映射。

ES 和 RDBMS 的比较

RDBMS(关系数据库管理系统)Elasticsearch
Table 表格Index 索引
Row 行Document 文档
Column 列Field 字段
Schema 表Mapping 映射
SQLDSL

ElasticSearch 生态

Kibana

Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让您在 Elastic Stack 中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。查看完整的 Kibana 功能列表

  • 一张图片胜过千万行日志;
  • 简单直观地构建可视化;
  • 通过 Kibana 中的 Canvas,发挥无限创意;
  • 仪表板助您获得深入洞见并采取行动;
  • 构建告警以触发定制行动;

Logstash

Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。

  • 输入、过滤器和输出;
  • 采集各种样式、大小和来源的数据;
  • 实时解析和转换数据;
  • 选择您的存储库,导出您的数据;

安装与使用

安装

Docker安装ELK

使用