ElasticSearch 入门

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 【2月更文挑战第7天】ElasticSearch 入门 简介 ElasticSearch 的基本概念 ElasticSearch 的查询流程 ElasticSearch 的更新流程

ElasticSearch 入门

简介

ElasticSearch,一个基于Lucene构建的搜索和分析引擎,可以高效、可靠地处理、存储和检索海量数据。它的设计目标是简单、高效地存储、搜索和分析大量数据。ElasticSearch支持近实时搜索,这意味着一旦数据被索引,用户就可以在极短的时间内对其进行搜索,从而保证了数据的时效性和相关性。ElasticSearch支持分布式系统,可以扩展到数十个甚至数百个节点,从而支持处理PB级别的数据,无论是存储还是检索,都能保持高效的性能。为了方便与各种编程语言和应用程序集成,ElasticSearch提供了灵活的RESTful API。

优点:

  1. 高性能:ElasticSearch具有快速的搜索和分析能力,能够处理大规模的数据。它基于Lucene构建,提供了高性能的倒排索引和搜索算法,使得数据检索变得迅速而高效。
  2. 可扩展性:ElasticSearch是一个分布式系统,可以轻松地扩展到多个节点,以处理大量的数据和请求。通过增加节点和配置集群,它可以实现水平扩展,满足不断增长的数据量和查询需求。
  3. 实时性:ElasticSearch支持近实时搜索,这意味着数据在索引后可以在几秒钟内被搜索到。它提供了实时更新和索引的功能,使得用户可以快速获取最新的信息。
  4. 分布式:ElasticSearch使用分布式架构,可以在多个节点上存储和处理数据,提高了系统的可靠性和容错性。它采用副本机制和分片技术,确保数据的高可用性和持久性。
  5. 易用性:ElasticSearch提供了简单易用的API和丰富的查询语言,使得开发人员可以快速上手并进行复杂的数据分析。它支持RESTful接口,可以轻松地与各种编程语言和应用程序集成。
  6. 开源免费:ElasticSearch是开源免费的软件,用户可以自由使用和定制。这为开发人员提供了更大的灵活性和成本效益。
  7. 生态系统丰富:ElasticSearch的生态系统非常丰富,有大量的第三方插件和工具可供选择和使用。这些插件和工具可以扩展和增强ElasticSearch的功能,满足各种特定需求。

ElasticSearch 的基本概念

  1. 存储

    • 索引:类似于MySQL中的表
    • 文档:类似于MySQL中的一行数据
    • 一个索引下可以有多个文档
  2. 部署

    • 分片:类似于MySQL等关系型数据库的分库分表,根据一定的规则将数据落在不同的库/表里,降低单表压力
    • 副本:类似于数据库的从库。防止节点崩溃数据丢失
  3. 倒排索引:相对于正排索引而言

    • 正排索引:找到数据了才知道它的属性。比如老师找到班长了,知道了他的年级排名。
    • 倒排索引:从属性出发,找到包含这些属性的数据。比如老师根据年级排名在前100这个条件,得到了一些学生的信息。
    • 倒排索引的例子:文档的属性有姓名和个性签名,那么在ES里存储的时候,就会存储在两张表格里,name表格存储姓名的相关信息,关键词是name的值;signature表格存储个性签名的相关信息,关键词是signature的值。预期搜索为,如果搜索的条件是name=Jeffy,就去name的表格里查找;如果搜索的条件为signature=“Life is a movie”,就去signature的表格里查找。而且为了提高查找的速度,表格通常会排序。
  4. FST:ES存储表格的数据结构就是FST,是共享后缀的前缀树。

    • 前缀树:相同前缀的合并

    • FST:相同前缀的合并,相同后缀的也链接。
      image-20240228212302457.png

ElasticSearch 的查询流程

先介绍下节点和实例的概念,在ES服务里,一个节点一般指一个实例,而一个实例可以扮演多种角色。主要有以下几种角色:

  • 主节点:创建索引
  • 候选主节点:相当于主节点的从节点,当主节点挂掉以后启用该节点
  • 数据节点:存储数据的节点
  • 协调节点:因为数据在存储的时候是分片的,比如name=Tom的文档在数据节点1上,name=Jeffy的文档在数据节点2上,请求查询数据的时候并不知道该查询哪个数据节点,协调节点就负责协调请求的处理过程,类似于为了解决分库分表查询的MySQL代理

所以,查询的过程就是,请求打到协调节点上,协调节点再请求各个数据节点拿到数据
image-20240228211700524.png

ElasticSearch 的更新流程

这里姑且把插入文档和更新文档都叫做更新流程,也就是把数据写入到ES的过程,主要分为以下几步:

  1. 文档被写到Buffer里
    • 当客户端发送一个写入请求(如索引一个文档)到ElasticSearch时,该文档首先会被写入到一个内部缓冲区(Buffer)中。这个阶段,文档还没有被持久化到磁盘,只是在内存中等待进一步的处理。
  2. 定时刷新数据到Page Cache里
    • 也就是refresh过程。在ElasticSearch中,refresh是一个周期性的操作,默认是每秒执行一次。它的作用是将Buffer中的文档刷新(flush)到操作系统的页面缓存(Page Cache)中。
    • 一旦数据被刷新到Page Cache,它就变得可以被搜索了。这是因为ElasticSearch在执行搜索查询时,会首先从Page Cache中读取数据。
    • 但是,需要注意的是,虽然数据在Page Cache中是可以被搜索的,但它还没有被持久化到磁盘。这意味着如果此时发生系统故障或节点宕机,这些数据可能会丢失。
    • 在refresh过程中,Buffer中的数据会被组织成一个个的段(Segment)。每个段都是一个不可变的、持久化的数据结构,包含多个文档。这些段是ElasticSearch索引的基本存储单位。
  3. 刷新到磁盘里
    • 数据从Page Cache刷新到磁盘的操作通常是由操作系统的文件系统自动处理的,而不是由ElasticSearch直接控制的。当操作系统认为需要将这些数据写入磁盘时(例如,当Page Cache中的数据量达到一定阈值时),它会异步地将数据写入磁盘。
    • 一旦数据被写入磁盘,它就变得持久化了,即使发生系统故障或节点宕机,数据也不会丢失。

因为refresh的过程是定时的,所以ES实际上做到的不是实时的查询,而是近实时的查询

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
6月前
|
安全 Linux 开发工具
Elasticsearch 搜索入门技术之一
Elasticsearch 搜索入门技术之一
257 1
|
6月前
|
JSON 自然语言处理 数据库
数据库-ElasticSearch入门(索引、文档、查询)
数据库-ElasticSearch入门(索引、文档、查询)
386 0
|
存储 关系型数据库 数据库
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
|
1月前
|
存储 Java API
Elasticsearch 7.8.0从入门到精通
这篇文章详细介绍了Elasticsearch 7.8.0的安装、核心概念(如正排索引和倒排索引)、RESTful风格、各种索引和文档操作、条件查询、聚合查询以及在Spring Boot中整合Elasticsearch的步骤和示例。
117 1
Elasticsearch 7.8.0从入门到精通
|
2月前
|
数据可视化 Java Windows
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
本文介绍了如何在Windows环境下安装Elasticsearch(ES)、Elasticsearch Head可视化插件和Kibana,以及如何配置ES的跨域问题,确保Kibana能够连接到ES集群,并提供了安装过程中可能遇到的问题及其解决方案。
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
|
2月前
|
存储 关系型数据库 MySQL
浅谈Elasticsearch的入门与实践
本文主要围绕ES核心特性:分布式存储特性和分析检索能力,介绍了概念、原理与实践案例,希望让读者快速理解ES的核心特性与应用场景。
|
3月前
|
JSON 搜索推荐 数据挖掘
ElasticSearch的简单介绍与使用【入门篇】
这篇文章是Elasticsearch的入门介绍,涵盖了Elasticsearch的基本概念、特点、安装方法以及如何进行基本的数据操作,包括索引文档、查询、更新、删除和使用bulk API进行批量操作。
ElasticSearch的简单介绍与使用【入门篇】
|
2月前
|
JSON 监控 Java
Elasticsearch 入门:搭建高性能搜索集群
【9月更文第2天】Elasticsearch 是一个分布式的、RESTful 风格的搜索和分析引擎,基于 Apache Lucene 构建。它能够处理大量的数据,提供快速的搜索响应。本教程将指导你如何从零开始搭建一个基本的 Elasticsearch 集群,并演示如何进行简单的索引和查询操作。
208 3
|
3月前
|
JSON 测试技术 API
黑马商城 Elasticsearch从入门到部署 RestClient操作文档
这篇文章详细介绍了如何使用Java的RestHighLevelClient客户端与Elasticsearch进行文档操作,包括新增、查询、删除、修改文档以及批量导入文档的方法,并提供了相应的代码示例和操作步骤。
|
3月前
|
JSON 自然语言处理 Java
Elasticsearch从入门到部署 文档操作 RestAPI
这篇文章详细介绍了Elasticsearch中文档的增删改查操作,并通过Java的RestHighLevelClient客户端演示了如何通过REST API与Elasticsearch进行交云,包括初始化客户端、索引库的创建、删除和存在性判断等操作。