SpringCloud:初识ES(ElasticSearch)

这篇具有很好参考价值的文章主要介绍了SpringCloud:初识ES(ElasticSearch)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.1.了解ES(ElasticSearch)

1.1.1.ElasticSearch的作用

ElasticSearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容

例如:

  • GitHub搜索代码

    SpringCloud:初识ES(ElasticSearch)

  • 在百度搜索答案

    SpringCloud:初识ES(ElasticSearch)

1.1.2.ELK技术栈

ElasticSearch结合kibanaLogstashBeats,也就是elastic stackELK)。被广泛应用在日志数据分析、实时监控等领域:

SpringCloud:初识ES(ElasticSearch)

ElasticSearchelastic stack的核心,负责存储、搜索、分析数据。

SpringCloud:初识ES(ElasticSearch)

1.1.3.ElasticSearch和lucene

ElasticSearch底层是基于lucene来实现的。

Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting1999年研发。官网地址:https://lucene.apache.org/ 。

Lucene的优势:

  • 易扩展

  • 高性能(基于排序索引)

Lucene的缺点:

  • 只限于java语言开发

  • 学习曲线陡峭

  • 不支持水平扩展

ElasticSearch的发展历史:

  • 2004Shay Banon基于Lucene开发了Compass
  • 2010Shay Banon重写了Compass,取名为Elasticsearch

相对于LuceneElasticSearch具备下列优势:

  • 支持分布式,可水平扩展

  • 提供Restful接口,可被任何语言调用

1.1.4.为什么不是其他搜索技术?

目前比较知名的搜索引擎技术排名:

SpringCloud:初识ES(ElasticSearch)

虽然在早期,Apache Solr是最主要的搜索引擎技术,但随着发展ElasticSearch已经渐渐超越了Solr,独占鳌头:

SpringCloud:初识ES(ElasticSearch)

1.1.5.总结

什么是ElasticSearch

  • 一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能

什么是elastic stackELK)?

  • 是以ElasticSearch为核心的技术栈,包括beatsLogstashkibanaElasticSearch

什么是Lucene

  • Apache的开源搜索引擎类库,提供了搜索引擎的核心API

1.2.倒排索引

倒排索引的概念是基于MySQL这样的正向索引而言的。

1.2.1.正向索引

那么什么是正向索引呢?例如给下表(tb_goods)中的id创建索引:

SpringCloud:初识ES(ElasticSearch)

如果是根据id查询,那么直接走索引,查询速度非常快。

但如果是基于title做模糊查询,只能是逐行扫描数据,流程如下:

1)用户搜索数据,条件是title符合"%手机%"

2)逐行获取数据,比如id1的数据

3)判断数据中的title是否符合用户搜索条件

4)如果符合则放入结果集,不符合则丢弃。回到步骤1

逐行扫描,也就是全表扫描,随着数据量增加,其查询效率也会越来越低。当数据量达到数百万时,就是一场灾难。

1.2.2.倒排索引

倒排索引中有两个非常重要的概念:

  • 文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息
  • 词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条

创建倒排索引是对正向索引的一种特殊处理,流程如下:

  • 将每一个文档的数据利用算法分词,得到一个个词条
  • 创建表,每行数据包括词条、词条所在文档id、位置等信息
  • 因为词条唯一性,可以给词条创建索引,例如hash表结构索引

如图:

SpringCloud:初识ES(ElasticSearch)

倒排索引的搜索流程如下(以搜索“华为手机”为例):

1)用户输入条件"华为手机"进行搜索。

2)对用户输入内容分词,得到词条:华为手机

3)拿着词条在倒排索引中查找,可以得到包含词条的文档id123

4)拿着文档id到正向索引中查找具体文档。

如图:

SpringCloud:初识ES(ElasticSearch)

虽然要先查询倒排索引,再查询倒排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描。

1.2.3.正向和倒排

那么为什么一个叫做正向索引,一个叫做倒排索引呢?

  • 正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程

  • 倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程

是不是恰好反过来了?

那么两者方式的优缺点是什么呢?

正向索引

  • 优点:
    • 可以给多个字段创建索引
    • 根据索引字段搜索、排序速度非常快
  • 缺点:
    • 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。

倒排索引

  • 优点:
    • 根据词条搜索、模糊搜索时,速度非常快
  • 缺点:
    • 只能给词条创建索引,而不是字段
    • 无法根据字段做排序

1.3.ES的一些概念

ElasticSearch中有很多独有的概念,与mysql中略有差别,但也有相似之处。

1.3.1.文档和字段

ElasticSearch是面向 文档(Document 存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储在ElasticSearch中:

SpringCloud:初识ES(ElasticSearch)

Json文档中往往包含很多的字段(Field,类似于数据库中的列。

1.3.2.索引和映射

索引(Index,就是相同类型的文档的集合。

例如:

  • 所有用户文档,就可以组织在一起,称为用户的索引;
  • 所有商品的文档,可以组织在一起,称为商品的索引;
  • 所有订单的文档,可以组织在一起,称为订单的索引;

SpringCloud:初识ES(ElasticSearch)

因此,我们可以把索引当做是数据库中的表。

数据库的表会有约束信息,用来定义表的结构、字段的名称、类型等信息。因此,索引库中就有映射(mapping,是索引中文档的字段约束信息,类似表的结构约束。

1.3.3.MySQL与ElasticSearch

我们统一的把MySQLElasticSearch的概念做一下对比:

MySQL ElasticSearch 说明
Table Index 索引(index),就是文档的集合,类似数据库的表(table
Row Document 文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式
Column Field 字段(Field),就是JSON文档中的字段,类似数据库中的列(Column
Schema Mapping Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema
SQL DSL DSLElasticSearch提供的JSON风格的请求语句,用来操作ElasticSearch,实现CRUD

是不是说,我们用了ElasticSearch就不再需要MySQL了呢?

并不是如此,两者各自有自己的擅长支出:

  • Mysql:擅长事务类型操作,可以确保数据的安全和一致性

  • ElasticSearch:擅长海量数据的搜索、分析、计算

因此在企业中,往往是两者结合使用:

  • 对安全性要求较高的写操作,使用MySQL实现
  • 对查询性能要求较高的搜索需求,使用ElasticSearch实现
  • 两者再基于某种方式,实现数据的同步,保证一致性

SpringCloud:初识ES(ElasticSearch)文章来源地址https://www.toymoban.com/news/detail-414198.html

到了这里,关于SpringCloud:初识ES(ElasticSearch)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud(十)——ElasticSearch简单了解(二)DSL查询语句及RestClient查询文档

    查询所有 :查询出所有数据,一般测试用。例如: match_all 全文检索查询 :利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: match_query multi_match_query 精确查询 :根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如: ids range

    2024年02月10日
    浏览(65)
  • elasticsearch(ES)分布式搜索引擎01——(初识ES,索引库操作和文档操作,RestClient操作索引库和文档)

    1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 1.1.2.ELK技术栈 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域: 而elasticsearc

    2024年02月07日
    浏览(62)
  • SpringCloud微服务(三)RabbitMQ、SpringAMQP、elasticsearch、DSL、MQ、ES详细介绍

    目录 一、初始MQ 同步调用 异步调用 什么是MQ 执行下面的命令来运行MQ容器: 如果冲突了,可以先查询 RabbitMQ概述  常见消息模型 HelloWorld案例 二、SpringAMQP 引入依赖 Work Queue  消费预取限制 ​编辑 发布、订阅 发布订阅Fanout Exchange 发布DirectExchange 发布订阅TopicExchange  消息转

    2024年02月12日
    浏览(44)
  • 初识SpringCloud

    一、软件架构演进 单体架构 垂直架构 分布式架构 SOA架构 微服务架构 二、微服务架构 2.1 微服务理念 \\\"微服务”一词源 于 Martin Fowler的名为 Microservices的博文,可以在他的官方博客上找到http://martinfowler.com/articles/microservices.html 微服务是系统架构上的一种设计风格,它的主旨是将

    2024年02月01日
    浏览(30)
  • 【SpringCloud入门】-- 初识Eureka注册中心

    目录 1.SpringCloudEureka简介 2.什么是CAP原则? 3.注册中心的概念? 4.SpringCloud其他注册中心 5.搭建Eureka注册中心 6.eureka的配置(主要是server,instance,client) 7.eureka集群概念 8.eureka集群搭建 1.SpringCloudEureka简介 注册发现中心Eureka,意为“发现了”。它是Netflix公司开发的一款基于RES

    2024年02月09日
    浏览(45)
  • ES-初识ES

    Elasticsearch是一个实时 分布式搜索和分析引擎 。它用于全文搜索、结构化搜索、分析。 全文检索:将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。 结构化检索:我想搜索商品分类为

    2024年02月06日
    浏览(22)
  • 【多线程】初识线程,基础了解

    目录 认识线程     概念         什么是线程?         为啥要有线程         进程和线程的区别         Java 的线程 和 操作系统线程 的关系     创建线程         1.继承 Thread 类         2.实现 Runnable 接口         3.通过匿名内部类方式创建Thread与实现

    2024年02月03日
    浏览(35)
  • 初识网络 --- 浅了解一些基础概念

    在每台计算机独立的情况下:假设现在有三台计算机,每台计算机各持有一个业务。那么现在有个程序员处理业务时,如果想要处理业务1就要操作计算机1,处理业务2就要操作计算机2,这样的效率明显不高 那么如果能将三台计算机都连接到一台服务器中,那么三台计算机就

    2024年02月11日
    浏览(39)
  • SpringCloud(九)——RabbitMQ简单了解

    同步通讯 同步通讯就像打电话,小明和小王正在连线,那么小李打进来肯定是打不通的,需要小明打完电话,小李才能进行连线。 那么在我们最初写代码时也是这个道理,当我们用户发起一个请求时,请求选择需要的服务,需要的服务再去调其他服务,当所有流程都做完之

    2024年02月10日
    浏览(29)
  • 初步了解SpringCloud微服务架构

    ✅作者简介:大家好,我是Cisyam,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Cisyam-Shark的博客 💞当前专栏: 微服务探索之旅 ✨特色专栏: MySQL学习 🥭本文内容:初步了解SpringCloud微服务架构 🖥️个人小站 :个人博客,欢迎大家访问 📚个人

    2024年02月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包