SpringCloud-深度理解ElasticSearch

一、Elasticsearch概述

1、Elasticsearch介绍

Elasticsearch(简称ES)是一个开源的分布式搜索和分析引擎,构建在Apache Lucene基础上。它提供了一个强大而灵活的工具,用于全文搜索、结构化搜索、分析以及数据可视化。ES最初设计用于处理大规模的日志数据,但其功能已经扩展到各种用例,包括应用程序搜索、业务分析等。简单来说,ElasticSearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。

ElasticSearch结合kibana、Logstash、Beats, 也就是 Elastic stack (ELK)。被广泛应用在日志数据分析、实时监控等领域。其中,ElasticSearch是elastic stack的核心,负责存储、搜索、分析数据。
在这里插入图片描述


2、ElasticSearch的底层技术

ElasticSearch的底层技术是Lucene。Lucene 是一个由 Apache 公司开发的搜索引擎类库,采用 Java 语言编写,是 Apache 公司的顶级项目。Doug Cutting 于 1999 年首次推出。Lucene 通过倒排索引实现了强大的全文搜索功能。

优势
  1. 易扩展: Lucene 提供了灵活的架构,容易进行定制和扩展,以适应各种搜索需求。

  2. 高性能: 基于倒排索引的搜索机制使得 Lucene 在搜索效率上表现出色,适用于大规模数据的搜索操作。

缺点
  1. Java 语言限制: Lucene 主要采用 Java 编写,因此在非 Java 语言的项目中可能不太方便使用。

  2. 学习曲线陡峭: 对于初学者而言,Lucene 的学习曲线较陡峭,需要一定的时间来熟悉其 API 和使用方式。

  3. 不支持水平扩展: Lucene 在水平扩展方面相对有限,这可能对需要处理大量数据的应用造成一些挑战。

Lucene 作为搜索引擎类库的先驱,为开发者提供了强大的搜索和索引功能。虽然它具有一些限制,但在正确使用和理解的情况下,Lucene 仍然是许多项目中首选的搜索引擎工具之一。


3、ElasticSearch排名

ElasticSearch在搜搜引擎中的排名一直是遥遥领先。
最新搜索引擎排名如下:

  1. Elasticsearch:开源的分布式搜索引擎
  2. Splunk:商业项目
  3. Solr:Apache的开源搜索引擎

二、倒排索引的概念

在理解倒排索引之前,需要了解文档和词条的概念。每一条数据就是一个文档,对文档中的内容分词,得到的词语就是词条。
倒排索引是一种用于快速查找文档的数据结构,与传统的正向索引方式相反。它将每个文档中的单词映射到文档的位置,以便更快速地进行搜索。

1、传统索引(正向索引)

正向索引是按照数据表的记录顺序建立的索引,将文档的每个字段都进行索引,方便按照记录的顺序快速访问。正向索引适用于需要按照记录顺序进行检索的场景。

在这里插入图片描述


2、倒排索引

倒排索引则是按照字段值建立索引,以便于快速查找包含特定字段值的记录。倒排索引适用于需要根据字段值进行检索的场景

在这里插入图片描述


3、正向索引 vs. 倒排索引

在这里插入图片描述

在查询流程中,用户查询的关键词直接匹配倒排索引,从而快速定位包含该关键词的记录。这样的查询流程相比于正向索引,减少了对整个数据表的遍历,提高了查询效率。

倒排索引在处理大量文本数据、搜索引擎等场景中具有显著的优越性,能够提供更快速的检索速度。


三、ElasticSearch相关概念理解

1、ElasticSearch概念

① 节点(Node)

Elasticsearch集群由一个或多个节点组成,每个节点是集群中的一个服务器,负责存储数据并参与集群的索引和搜索功能。

② 索引(Index)

索引是相同类型的文档的集合,它们属于逻辑分组。每个文档都有一个唯一的ID,而索引则为这些文档提供了命名空间。

③ 类型(Type)

在较新的 Elasticsearch 版本中,类型已经逐渐被弃用。在较新的数据模型中,索引通常只包含一个类型。

④ 分片和副本(Shards and Replicas)

为了支持水平扩展和提高冗余性,ES将索引分为多个分片,每个分片是一个独立的索引。此外,每个分片都可以有零个或多个副本,用于提高数据的可用性和容错性。

⑤ 映射(Mapping)
  • 映射是索引中文档的字段约束信息,类似表的结构约束。
  • 映射定义了索引中的数据结构,包括字段的类型、分析器和其他属性。
  • 映射有助于确定如何索引和查询文档中的数据。

2、ES和MySQL的概念对比

从上面的ES的特性里,我们可以看到,ES和MySQL有很多相似的地方,下面是两者相似特性的对比:

MySQLElasticsearch说明
TableIndex索引(index)是文档的集合,类似数据库的表(table)
RowDocument文档(Document)是一条条的数据,类似数据库中的行(Row),文档都是JSON格式
ColumnField字段(Field)是JSON文档中的字段,类似数据库中的列(Column)
SchemaMappingMapping(映射)是索引中文档的约束,例如字段类型约束,类似数据库的表结构(Schema)
SQLDSLDSL是Elasticsearch提供的JSON风格的请求语句,用来操作Elasticsearch,实现CRUD

四、ElasticSearch应用场景

1、ES参与的项目架构

在实际项目中,Elasticsearch(ES)常常与MySQL联用,形成了一种典型的项目架构。MySQL擅长处理事务类型的操作,能够确保数据的安全和一致性。因此,在项目中对于数据的增删改(事务类操作)仍然使用MySQL完成。而Elasticsearch则专注于海量数据的搜索、分析和计算,为项目提供高效的搜索功能。

示例架构如下:
在这里插入图片描述

通过这种架构,项目可以充分利用MySQL的事务处理能力,保障数据的完整性和可靠性。同时,借助Elasticsearch强大的搜索引擎和分析功能,实现对海量数据的快速检索和深度分析。


2、ES应用场景

Elasticsearch在各个领域都有广泛的应用,主要体现在以下几个方面:

① 搜索引擎

ES作为一款强大的全文搜索引擎,广泛应用于构建搜索引擎、文档检索系统等场景。通过对海量文本数据建立倒排索引,ES能够快速、准确地响应用户的搜索请求,为用户提供良好的搜索体验。

② 数据分析

在大数据分析领域,ES被广泛用于存储和分析大规模的日志数据、事件数据等。其强大的聚合和分析能力使得用户能够轻松地进行数据挖掘、可视化分析等操作,从而更好地理解数据背后的信息。

③ 实时监控

ES具有实时索引和搜索的能力,因此在实时监控系统中得到了广泛应用。通过将实时产生的监控数据存储在Elasticsearch中,用户可以及时获取系统的运行状况、异常信息等,实现对系统状态的实时监控。

④ 商业智能

ES也被应用于商业智能领域,支持用户进行复杂的数据分析和报表生成。通过整合多源数据,利用ES的搜索和分析功能,企业可以更好地理解市场趋势、用户行为等信息,为决策提供数据支持。

⑤ 地理信息系统

ES支持地理空间搜索,因此在地理信息系统(GIS)领域有着广泛的应用。用户可以利用ES存储和检索与地理位置相关的数据,实现空间数据的快速查询和分析。

总体而言,Elasticsearch的强大搜索和分析能力使其成为各行业解决大数据存储、搜索和分析难题的首选工具。


五、Elasticsearch总结

Elasticsearch(ES)作为一款开源、高性能的搜索引擎和分析工具,具有广泛的应用前景。通过本文的介绍,我们深入了解了Elasticsearch的基本概念、原理以及在实际项目中的应用场景。以下是对Elasticsearch的总结:

1、强大的搜索引擎功能

Elasticsearch以其卓越的全文搜索引擎功能而著称,能够快速、准确地响应用户的搜索请求。通过倒排索引等技术,ES实现了高效的文本搜索,广泛应用于构建搜索引擎、文档检索系统等场景。

2、高效的数据分析和聚合能力

在大数据分析领域,Elasticsearch通过实时索引和搜索的机制,支持对海量数据进行快速的分析和聚合。其灵活的查询语言和丰富的聚合功能使得用户能够轻松进行数据挖掘、可视化分析等操作。

3、实时监控和可视化

ES具有实时索引和搜索的特性,因此在实时监控系统中得到了广泛应用。通过将实时产生的监控数据存储在Elasticsearch中,用户可以及时获取系统的运行状况、异常信息等,实现对系统状态的实时监控。

4、多领域的应用场景

Elasticsearch不仅在搜索引擎领域有着出色的表现,还在数据分析、商业智能、实时监控、地理信息系统等多个领域取得了成功的应用。其灵活性和可扩展性使得ES成为解决大数据存储、搜索和分析难题的理想工具。

5、与MySQL等数据库的协同应用

在实际项目中,ES与传统关系型数据库如MySQL协同应用,形成了一个有机的整体。MySQL负责事务型操作,确保数据的安全和一致性,而Elasticsearch则专注于搜索和分析,提供高效的全文搜索和大数据处理能力。

综合而言,Elasticsearch以其卓越的性能和丰富的功能,在大数据时代发挥着越来越重要的作用。无论是构建搜索引擎、实现实时监控,还是进行复杂的数据分析,Elasticsearch都为用户提供了一种高效、可靠的解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/758615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​selenium+python做web端自动化测试框架与实例详解教程

最近受到万点暴击,由于公司业务出现问题,工作任务没那么繁重,有时间摸索seleniumpython自动化测试,结合网上查到的资料自己编写出适合web自动化测试的框架,由于本人也是刚刚开始学习python,这套自动化框架目…

【NLP笔记】RNN总结

文章目录 经典RNN单向RNN双向RNNDeep RNNRNN特性总结 变体RNNLSTMGRU 参考及转载内容: 循环神经网络(RNN)深度学习05-RNN循环神经网络完全理解RNN(循环神经网络) 传统的CNN(Covolutional Neural Network&am…

Redis6.0多线程的疑惑解答

1.Redis6.0之前的版本真的是单线程吗? Redis在处理客户端的请求是,包括获取(socket读)、解析、执行、内容返回(socket 写)等都有一个 顺序串行的主线程处理,这就是所谓的"单线程"。但如果严格来讲并不是单线程,除了主线…

浏览量这么低,还要不要继续坚持?

哈喽,你好啊,我是雷工! 曾经在一个群里聊天,有群友看到我两位数的浏览量,说到:浏览量这么低还坚持什么? 浏览量低是事实,大多数是十几二十的,上百的都是少数&#xff0c…

python社区垃圾分类管理平台的设计与实现flask-django-php-nodejs

近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,社区垃圾分类管理平台利用计算机网络实现信息化管理,使整个社区垃圾分类管理的发展和服务水平有显著提升。 语言&#xf…

Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(一)

概览 Swift 语言给我们的印象是:简洁、现代化和可以“心安神泰”的完全信赖。不过,在一些特殊情况下我们唯有进入 Swift 底层的动态世界方能真正地“随遇而安”。 保安局“刘局长”曾语重心长的教导过我们:“非常时期,用非常方法…

有了std::thread,为什么还需要引入std::jthread?

C进阶专栏:http://t.csdnimg.cn/HGkeZ 目录 1.前言 2.std::is_invocable_v 3.std::jthread 3.1.构造函数 3.2.std::jthread无需join/detach使用实例 3.3.std::jthread处理外部请求中断实 3.4.处理中断请求示例代码 4.特性 5.总结 1.前言 C11以来提供了C原…

Redis实现高可用方案

文章目录 前言一、主从模式1.1 复制流程1.2 优缺点 二、哨兵模式2.1 介绍2.2 哨兵的工作模式 三、集群模式3.1 Cluster集群节点的通讯3.2 Hash Slot插槽算法3.3 Redis Cluster集群3.4 故障转移 前言 如果单机部署Redis服务的话,一旦Reids宕机,那么整个服…

英伟达 V100、A100/800、H100/800 GPU 对比

近期,不论是国外的 ChatGPT,还是国内诸多的大模型,让 AIGC 的市场一片爆火。而在 AIGC 的种种智能表现背后,均来自于堪称天文数字的算力支持。以 ChatGPT 为例,据微软高管透露,为 ChatGPT 提供算力支持的 A…

centos 环境部署

一、安装redis 1. 升级 GCC 最直接的解决方式是升级你的 GCC 编译器到支持 C11 标准的版本。CentOS 7 默认的 GCC 版本较旧,可能不支持 _Atomic。你可以通过以下步骤升级 GCC: 启用 CentOS 的 Software Collections (SCL) 仓库,该仓库提供了…

王老吉药业开拓数字经济“新蓝海”,成立数字经济研究所,科技赋能新品压片糖

3月12日,广州王老吉药业股份有限公司(以下简称“王老吉药业”)召开第十一届312感恩活动新闻发布会,宣告王老吉数字经济研究所成立,并发布王老吉压片糖新品。一系列重要重要举措,无一不标志着王老吉药业正以…

Java SE入门及基础(44)

目录 I / O流(上) 1. 什么是I / O流 过程分析 I / O的来源 Java 中的 I / O流 2. 字节流 OutputStream 常用方法 文件输出流 FileOutputStream 构造方法 示例 InputStream 常用方法 文件输入流 FileInputStream 构造方法 示例 综合练习 字节流应用场景 Java SE文…

自动化测试报告生成(Allure)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 之前尝试使用过testNG自带的测试报告、优化过reportNG的测试报告…

算法·动态规划Dynamic Programming

很多人听到动态规划或者什么dp数组了,或者是做到一道关于动态规划的题目时,就会有一种他很难且不好解决的恐惧心理,但是如果我们从基础的题目开始深入挖掘动规思想,在后边遇到动态规划的难题时就迎难而解了。  其实不然&#xff…

linux:线程互斥

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、线程互斥问题解释互斥量的接口 二、加锁的原理三、 死锁死锁四个必要条件避免死锁 总结 前言 本文是对于线程互斥的知识总结 一、线程互斥 问题 我们先看下面…

财报解读:出海“窗口期”再现,汇量科技保驾护航的底气源于什么

大数据时代,每个人的喜好都被精准捕捉。购物APP、购物网站们,都仿佛一位贴心的时尚顾问。而这源于个性化广告经过深度学习和智能算法得来的结果。 随着广告市场的竞争愈演愈烈,广告主们需要更为精准、高效的个性化投放。近日,深耕…

基于SSM的宿舍管理系统的设计与实现(JSP,MySQL)

摘 要 随着社会发展、信息技术的普及,人们日常管理工作也发生了巨大的变化。信息化技术之渗透各行业的方方面面。学生宿舍管理作为校园管理工作的重要一环,不仅关系到学生自身的确切利益,同时也是对校园管理工作重大考验。近来年由于在校学生…

leetcode代码记录(移除链表元素

目录 1. 题目:2. 我的代码:小结: 1. 题目: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head […

Flutter开发进阶之瞧瞧Widget

Flutter开发进阶之瞧瞧Widget 在Flutter开发中,WIdget是构建界面的基本单元;Widget是不可变的,意味着一旦创建如果需要改变UI就需要重新创建一个新的Widget;在实际开发中,Widget通常由一个个Widget组合而成,从而形成嵌套的树形结构,复杂的UI就是由这一个个Widget构建而…

【C语言】—— 指针三 : 参透数组传参的本质

【C语言】—— 指针三 : 参透数组传参的本质 一、数组名的理解二、使用指针访问数组2.1、指针访问数组2.2、[ ] 的深入理解2.3、数组与指针的区别 三、一维数组的传参本质四、数组指针变量4.1、数组指针变量是什么4.2、 数组指针的初始化 五、二维数组传参的本质 一…