ElasticSearch学习(一)——概述

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: ElasticSearch学习(一)——概述

image.png

目录

ElasticSearch概述

1. 入门简介

1.简介

2. 特点

3. Kibana

4. 存储结构

1. index

2. type

3. document

4. field

5. mapping

5. 其他重要概念

1. cluster 集群

2. node 节点

3. shard 分片

4. replica 副本

ElasticSearch概述

1. 入门简介

1.简介

Elasticsearch(ES) 是一个基于 Apache Lucene 开源的分布式、高扩展、近实时的搜索引擎,主要用于海量数据快速存储,实时检索,高效分析的场景。通过简单易用的 RESTful API,隐藏 Lucene 的复杂性,让全文搜索变得简单。

ES 功能总结有三点:

分布式存储

分布式搜索

分布式分析

因为是分布式,可将海量数据分散到多台服务器上存储,检索和分析,只要是海量数据需要完成上面这三种操作的业务场景,一般都会考虑使用 ES,比如维基百科,Stack Overflow,GitHub 后台均有使用。

下面是 DB-Engines Ranking 给出的数据库流行度排行榜。ES 位居 Top 10 的位置,受欢迎的程度,可见一斑。

2. 特点

ES 为什么这么受欢迎,得益于其相较于传统数据库所拥有的强大功能。

ES 不是什么新技术,主要是将全文检索、数据分析以及分布式技术结合在一起,形成了独一无二的 ES;数据库的功能面对很多领域是不够用的,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理;ES 作为传统数据库的一个补充,提供了数据库所不不能提供的很多功能;可以作为一个大型分布式集群(数百台服务器)技术,处理 PB 级数据,服务大公司;也可以运行在单机上,服务小公司;对用户而言,开箱即用,非常简单,作为中小型的应用,分钟级部署,就可以作为生产环境的系统来使用了。

3. Kibana

说到 ES 必须要提一下 Kibana 。

ES、Logstash 和 Kibana 共同组成 ELK。ELK 是这三个开源项目的首字母缩写。这个三个项目组合在一起,就形成了 ELK 软件栈。他们三个共同形成了一个强大的生态圈。

简单地说,Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 ES 等存储库中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。Elasticsearch 处于最核心的位置,它可以帮我们对数据进行快速地搜索及分析。

Kibana 以 Web 后台的形式提供了一个可视化操作 ES 的系统,支持根据 ES 数据绘制图表,支持 ES 查询语法自动补全等高级特性,更加方便了我们操作 ES。

事实上 Elasticsearch 的完整栈有如下的几个:

Elasticsearch

Kibana

Logstash

Beats

其中 Beats 是一个免费且开放的平台,集合了多种单一用途数据采集器。它们从成百上千或成千上万台机器和系统向 Logstash 或 Elasticsearch 发送数据。

4. 存储结构

要想完成对 ES 的增删改查,必须先了解一下 ES 的存储结构。

大家对 MySQL 的存储结构应该是很清楚的,所以咱们在学习 ES 存储结构时,同时类比 MySQL,这样理解起来会更透彻。MySQL 的数据模型由数据库、表、字段、字段类型组成,自然 ES 也有自己的一套存储结构。

ES 存储结构与 MySQL 存储结构的对应关系。

image.png

1. index

索引(index)类似 MySQL 的表,是文档(document)的集合。文档是 ES 中存储的一条数据,下面会详细介绍。

2. type

type 为文档类型,不过在 ES 7.0 以后的版本 已经废弃文档类型了,一个 index 中只有一个默认的 type,即 _doc。在 ES 老版本中文档类型代表一类文档的集合,index 类似 MySQL 的数据库,文档类型类似 MySQL 的表。既然 ES 新版本文档类型没什么作用了,那么 index(索引)就类似 MySQL 表的概念,ES 没有数据库的概念了。

老版本 ElasticSearch与Mysql对照表:

3. document

ES 是面向文档的数据库,文档是 ES 存储的最基本的存储单元,文档类似 MySQL 表中的一行数据。在 ES 中,文档使用 JSON 格式存储,因此存储上要比 MySQL 灵活很多,因为 ES 支持任意格式的 JSON 数据。

{
  "_index" : "order",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "_seq_no" : 1,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "id" : 10000,
    "status" : 0,
    "total_price" : 10000,
    "create_time" : "2020-09-06 17:30:22",
    "user" : {
      "id" : 10000,
      "username" : "asong2020",
      "phone" : "888888888",
      "address" : "深圳人才区"
    }
  }
}

其中 _source 为记录的具体内容,其他字段为文档的元数据,是插入 JSON 记录时 ES 自动生成的系统字段,二者共同组成一个 document。

常用的元数据有:

_index:

代表当前文档所属索引,(可以当成mysql中记录的所在表)

_type:

代表当前文档所属类型(ES 7.0 以后废弃了 type 用法,但是元数据还是可以看到的)

_id:

文档唯一 ID,如果没有为文档指定 ID 则自动生成。

_source:

文档的原始 JSON 数据

_version:

文档的版本号,每修改一次文档,字段就会加 1,这个字段新版 ES 也给取消了

_seq_no:

文档编号,每修改一次文档,字段就会加 1,替代老的 version。注意 seq_no 递增属于整个 index,而不是单个文档

_primary_term:

文档所在主分区,这个可以跟 seq_no 搭配实现乐观锁并发控制,以防止旧版本的文档覆盖较新的文档。

4. field

文档由多个 JSON 字段组成,字段跟 MySQL 中表的字段类似,常用字段类型有:

binary:编码为Base64字符串的二进制值

boolean:布尔类型

Keywords:关键词族,不支持全文搜索。具体包括 keyword, constant_keyword 和 wildcard

Numbers:数值类型,包括 long、integer、short、byte、double、float、half_float、scaled_float、unsigned_long

Dates:日期类型,包括 date 和 date_nanos

text 文本类型,支持全文搜索

alias:为现有字段的别名

更多类型请查阅 Elasticsearch Guide 8.0] » Mapping » Field data types。

5. mapping

mapping 类似于 MySQL 的表结构定义,每个索引都有一个映射的规则,我们可以通过定义索引的映射规则,提前定义好文档的 JSON 结构和字段类型。如果没有定义索引的 mapping,ES 会在写入数据的时候,根据我们写入的数据字段推测出对应的字段类型,相当于自动定义索引的 mapping 。

注意: ES 的自动映射很方便,是实际业务中,对于关键字段类型,通常预先定义好,这样可以避免 ES 自动生成不是你想要的字段类型。

5. 其他重要概念

除了数据结构的相关概念,因 ES 是一个分布式支持水平扩展的数据库系统,必然少不了分布式相关的概念,这个最好也需要了解一下。

1. cluster 集群

一个集群由一个或多个节点组成,它们共同持有数据,一起提供存储搜索功能。

集群 由一个唯一的名字 进行区分,默认为"elasticsearch",集群中的节点通过这个唯一的名字加入集群。

2. node 节点

节点是 ES 集群的一部分,只要多个节点在同个网络中,节点就可以通过 指定集群的名称 加入其中,与集群中的其他节点相互感知。

和集群类似,一个节点也是由一个唯一名字来标识的。默认情况下,这个名字是一个随机的漫威漫画角色名字,这个名字会在启动的时候赋予节点。这个名字对于管理工作来说挺重要的,因为在这个管理过程中,你会去确定网络中的哪些服务器对应于 ES 集群中的哪些节点。

3. shard 分片

索引可以存储大量的数据,这些数据可能超过单个节点的硬件限制。为了解决这一问题,ES 提供细分索引的能力,即分片(shard)。

一个 shard 对应一个 Lucene 实例。ES 可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。

分片的数量只能在索引创建前指定,并且索引创建后不能更改。

至于一个分片怎样分布,它的文档怎样聚合回搜索请求,完全由 ES 管理,对于作为用户来说,这些都是透明的。

4. replica 副本

在一个网络环境里,节点故障随时都可能发生,在某个分片/节点出现故障时,有一个备份机制是非常有用的。为此 ES 允许你为分片创建一份或多份拷贝,这些拷贝叫做副本(replica)。

副本之所以重要,主要有两方面的原因:一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高查询效率,ES 会自动对搜索请求进行负载均衡。

总之,每个索引可以被分成多个分片。一个索引也可以被复制 0 次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片和副分片(主分片的拷贝)。分片和复本的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变副本数量,但是不能改变分片的数量。

默认情况下,ES 中的每个索引被分为 5 个主分片和 1 份拷贝。如果你的集群中至少有两个节点,你的索引将会有 5 个主分片和另外 5 个副分片,这样的话每个索引总共就有 10 个分片。一个索引的多个分片可以存放在集群中的一台主机上,也可以分散存放在多台主机上,这取决于你的集群机器数量。主分片和副分片的具体位置是由 ES 内在的策略所决定的。有一点可以确定是,同一个节点上面,副本和主分片是一定不会在同一个节点上的。

注意: 从 7.x 版本开始,不设置 index 的 shard 数,缺省(默认)主分片由 5 改为了 1 个。

以上相关概念的逻辑关系如下图:

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
5月前
|
存储 缓存 自然语言处理
Elasticsearch框架学习的难点和重点有哪些
Elasticsearch是基于Lucene的开源搜索引擎,广泛应用于全文检索和日志分析。学习重点包括理解节点、集群、索引、分片和副本等基本概念,掌握数据索引、查询DSL、聚合和性能优化。倒排索引和分词器是全文搜索的核心,集群管理和监控对于稳定性至关重要。实践中需根据数据量和查询模式优化分片策略,利用缓存提升搜索性能。学习Elasticsearch要结合实际项目,关注官方文档和社区资源。【5月更文挑战第6天】
|
5月前
|
人工智能 架构师 开发者
大模型时代,该如何更好的学习 Elasticsearch?
大模型时代,该如何更好的学习 Elasticsearch?
53 0
|
SQL JSON 自然语言处理
Elasticsearch学习随笔与Scrapy中Elasticsearch的应用
Elasticsearch学习随笔与Scrapy中Elasticsearch的应用
|
5月前
|
JSON 关系型数据库 MySQL
elasticsearch 概述
elasticsearch 概述
82 0
|
存储 搜索推荐 数据可视化
|
存储 搜索推荐 数据可视化
一.全文检索ElasticSearch经典入门-全文索引&ES概述&ES安装&Kibana安装
一.全文检索ElasticSearch经典入门-全文索引&ES概述&ES安装&Kibana安装
|
搜索推荐 NoSQL Java
ElasticSearch全文搜索引擎 -Spring Boot操作ES(SpringData概述、Spring Data Elasticsearch、基本操作、ElasticSearch操作文档)
ElasticSearch全文搜索引擎 -Spring Boot操作ES(SpringData概述、Spring Data Elasticsearch、基本操作、ElasticSearch操作文档)
ElasticSearch全文搜索引擎 -Spring Boot操作ES(SpringData概述、Spring Data Elasticsearch、基本操作、ElasticSearch操作文档)
|
Java API Maven
ElasticSearch学习(三):Java API操作ElasticSearch
ElasticSearch学习(三):Java API操作ElasticSearch
214 0
ElasticSearch学习(三):Java API操作ElasticSearch
|
关系型数据库 数据库 索引
ElasticSearch学习(一):HTTP操作ElasticSearch
为了操作方便,我直接使用了Windows下的ElasticSearch。需要注意的一点是,ElasticSearch8以上的版本是基于java17的。 我使用的是7.6.2的版本。下载好压缩包之后,解压,进入bin目录,双击elasticsearch.bat文件即可启动。
362 0
ElasticSearch学习(一):HTTP操作ElasticSearch
|
JSON 搜索推荐 Java
Elasticsearch 概述及安装
Elasticsearch 概述及安装
200 0
Elasticsearch 概述及安装
下一篇
无影云桌面