当前位置: 首页 > news >正文

Elasticsearch核心概念:

2.Elasticsearch核心概念:

2.1.Lucene和Elasticsearch的关系:

  • 1.Lucene:最先进、功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂在这里插入图片描述
  • 2.Elasticsearch:基于lucene,封装了许多lucene底层功能,提供简单易用的restful api接口和许多语言的客户端,如java的高级客户端(Java High Level REST Client)和底层客户端(Java Low Level REST Client)
    在这里插入图片描述

Elasticsearch起源:Shay Banon。2004年失业,陪老婆去伦敦学习厨师。失业在家帮老婆写一个菜谱搜索引擎。封装了lucene的开源项目,compass。找到工作后,做分布式高性能项目,再封装compass,写出了elasticsearch,使得lucene支持分布式。现在是Elasticsearch创始人兼Elastic首席执行官


2.2.Elasticsearch的核心概念

a.NRT

  • 1.NRT意思就是近实时
  • 2.近实时体现在两方面:
    • 写入数据时,过1秒才会被搜索到,因为内部在分词、录入索引。
    • Es搜索时:搜索和分析数据需要秒级出结果。

b.Cluster(集群)与节点(Node):

b1.集群:
  • 1.包含一个或多个启动着es实例的机器群。通常一台机器起一个es实例。同一网络下,集名一样的多个es实例自动组成集群,自动均衡分片等行为。默认集群名为“elasticsearch”
    在这里插入图片描述
b2.Node(节点):
  • 1.每个Es实例称为一个节点。节点名自动分配,也可以手动配置

c.文档和字段:

c1.文档:
  • 1.Elasticsearch是面向文档(Document)存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储在elasticsearch中:
    在这里插入图片描述
  • 2.而Json文档中往往包含很多的字段(Field),类似于数据库中的列。对于上面表格,每一行是一个文档,每一列是一个字段
  • 3.文档是Es中的最小数据单元。一个document就像数据库中的一条记录。通常以json格式显示。多个document文档存储于一个索引(Index)中
book document{"book_id": "1","book_name": "java编程思想","book_desc": "从Java的基础语法到最高级特性(深入的[面向对象](https://baike.baidu.com/item/面向对象)概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。","category_id": "2","category_name": "java"
}
c2.字段:
  • 4.在一个 index/type 里面,你可以存储任意多的文档

d.索引和映射

d1.Index:索引
  • 1.索引就是相同类型的文档的集合,类似于mysql的表,例如:
    • 所有用户文档,就可以组织在一起,称为用户的索引;
    • 所有商品的文档,可以组织在一起,称为商品的索引;
    • 所有订单的文档,可以组织在一起,称为订单的索引;
      在这里插入图片描述- 2.一个索引由一个名字来标识(必须全部是小写字母),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引
  • 3.能搜索的数据必须索引,这样的好处是可以提高查询速度,比如:新华字典前面的目录就是索引的意思,目录可以提高查询速度。
  • 4.索引创建规则:
    • 仅限小写字母
    • 不能包含\、/、 *、?、"、<、>、|、#以及空格符等特殊符号
    • 从7.0版本开始不再包含冒号
    • 不能以-、_或+开头
    • 不能超过255个字节(注意它是字节,因此多字节字符将计入255个限制)
d2.mapping 映射:
  • 1.数据库的表会有约束信息,用来定义表的结构、字段的名称、类型等信息。因此,索引库中就有映射(mapping),是索引中文档的字段约束信息,类似表的结构约束是处理数据的方式和规则方面做一些限制
  • 2.映射举例如:某个字段的数据类型、默认值、分析器、是否被索引等等。这些都是映射里面可以设置的,其它就是处理 ES 里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。

Elasticsearch与mysql对比:

关系型数据库(比如Mysql)非关系型数据库(Elasticsearch)非关系型数据库(Elasticsearch)
表Table索引Index(原为Type)索引(index),就是文档的集合,类似数据库的表(table)
数据行Row文档Document文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式
数据列Column字段Field字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)
约束 Schema映射MappingMapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema)
SQLDSLDSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD

e.Type:类型

  • 1.每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document,都有相同的field。
  • 2.注意:6.0之前的版本有type(类型)概念,type相当于关系数据库的表,ES官方将在ES9.0版本中彻底删除type。本教程type都为_doc
    在这里插入图片描述

f.shard:分片

  • 1.index数据过大时,将index里面的数据,分为多个shard,分布式的存储在各个服务器上面。可以支持海量数据和高并发,提升性能和吞吐量,充分利用多台机器的cpu。

g.replica:副本

  • 1.在分布式环境下,任何一台机器都会随时宕机,如果宕机,index的一个分片没有,导致此index不能搜索。所以,为了保证数据的安全,我们会将每个index的分片经行备份,存储在另外的机器上。保证少数机器宕机es集群仍可以搜索。
  • 2.能正常提供查询和插入的分片我们叫做主分片(primary shard),其余的我们就管他们叫做备份的分片(replica shard)
  • 3.Es6默认新建索引时,5分片,2副本,也就是一主一备,共10个分片。所以,Es集群最小规模为两台

h.分配(Allocation)

  • 1.将分片分配给某个节点的过程,包括分配主分片或者副本。如果是副本,还包含从主分片复制数据的过程。这个过程是由 master 节点完成的

3.系统架构:

在这里插入图片描述

  • 1.一个运行中的 Elasticsearch 实例称为一个节点,而集群是由一个或者多个拥有相同cluster.name 配置的节点组成,它们共同承担数据和负载的压力。
  • 2.当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。当一个节点被选举成为主节点时, 它将负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。 而主节点并不需要涉及到文档级别的变更和搜索等操作,所以集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。
  • 3.任何节点都可以成为主节点。我们的示例集群就只有一个节点,所以它同时也成为了主节点。作为用户,我们可以将请求发送到集群中的任何节点 ,包括主节点。 每个节点都知道任意文档所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点。 无论我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,并将最终结果返回給客户端。 Elasticsearch 对这一切的管理都是透明的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Linux —— 线程控制】
  • 电子合同如何在线签?9大协助工具软件
  • Python之字符串操作(连接符、重复符、比较、in)
  • 探索SQL的神秘力量:模糊匹配的艺术
  • 8月线代强化规划,李永乐重点总结+带刷计划!
  • Linux驱动入门实验班——LED驱动(附百问网视频链接)
  • pnpm install 后还是没有生成 pnpm-lock.yaml 文件
  • CentOS系统下安装NVIDIA显卡驱动
  • 云原生日志Loki
  • MySQL 数据表管理
  • 41-设计规则:线宽规则
  • [upload]-做题笔记
  • 疫情隔离酒店管理系统的开发--论文pf
  • Postman内置动态参数和自定义动态参数
  • 钧瓷联合体——7月中国最具影响力的50位钧瓷匠人
  • 【Leetcode】104. 二叉树的最大深度
  • export和import的用法总结
  • IDEA 插件开发入门教程
  • Javascript Math对象和Date对象常用方法详解
  • Java基本数据类型之Number
  • mysql中InnoDB引擎中页的概念
  • Node 版本管理
  • OSS Web直传 (文件图片)
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • uva 10370 Above Average
  • vue.js框架原理浅析
  • 从setTimeout-setInterval看JS线程
  • 关于for循环的简单归纳
  • 前端性能优化——回流与重绘
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 微信开放平台全网发布【失败】的几点排查方法
  • 线性表及其算法(java实现)
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • ionic入门之数据绑定显示-1
  • 选择阿里云数据库HBase版十大理由
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #Linux(帮助手册)
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Qt) 默认QtWidget应用包含什么?
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (十五)使用Nexus创建Maven私服
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET Core 项目指定SDK版本
  • .NET MVC 验证码
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • .NET应用架构设计:原则、模式与实践 目录预览
  • [ C++ ] STL---仿函数与priority_queue