​ElasticSearch

1 篇文章 0 订阅
订阅专栏

目录

简介

基本概念

倒排索引

FST


简介

ES是一个基于lucene构建的,分布式的,RESTful的开源全文搜索引擎。支持对各种类型的数据的索引;搜索速度快,可以提供实时的搜索服务;便于水平扩展,每秒可以处理 PB 级海量数据

  • E:EalsticSearch 搜索和分析的功能
  • L:Logstach 搜集数据的功能,类似于flume(使用方法几乎跟flume一模一样),是日志收集系统
  • K:Kibana 数据可视化(分析),可以用图表的方式来去展示,文不如表,表不如图,是数据可视化平台

基本概念

ES 和传统数据库相比对应关系如下:

关系数据库数据库表结构
ES索引(index)类型(type)映射(Mappering)文档(documents)字段(field)
  • 索引:一个 索引 就是一个拥有几分相似特征的文档的集合。ES 将数据存储于一个或多个索引中,索引 就相当于 SQL 中的一个数据库
  • 类型:类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型(type)。一般来说,类型就是为那些拥有相同的域的文档做的预定义。类比传统的关系型数据库领域来说,类型 相当于 表,7.x 版本默认使用 _doc 作为 type 。
  • 文档:文档是 Lucene 索引和搜索的 原子单位,它是包含了一个或多个域的容器,基于 Json 格式进行表示。文档有一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常被称为 多值域,每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。相当于 mysql 表中的 row 。
  • 字段:Field 是相当于数据库中的 Column
  • 映射:Mapping 是定义文档及其包含的字段如何存储和索引的过程。Mapping 是 ES 中的一个很重要的内容,它类似于传统关系型数据中 table 的 schema,用于定义一个索引(index)的某个类型(type)的数据结构。

  • 集群(cluster)& 节点(Node):Elasticsearch 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elasticsearch 实例。单个 Elasticsearch 实例称为一个节点(Node),一组节点构成一个集群(Cluster)。
  • 分片(shard):一个 索引 可以存储超出单个结点硬件限制的大量数据。比如,一个具有 10亿文档的索引占据 1TB 的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,这些份就叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的 索引,这个 索引 可以被放置到集群中的任何节点上。
  • 副本(Replica):副本是一个分片的精确复制,每个分片可以有零个或多个副本。提高系统的容错性,当某个节点某个分片损坏或丢失时,可以从副本中恢复;提高 ES 查询效率,ES 会自动对搜索请求进行负载均衡。

倒排索引

es之所以那么快,查询起来效率这么高,主要还是es插入数据的索引机制。

我们知道 mysql 查询这么快,是由于建立了 B+树 ,内部建立了树状的索引,这种称为正排索引。

用B+树作为索引行不行呢?全文索引就是需要支持对大文本进行索引的,从空间上来说 B+ 树不适合作为全文索引,同时 B+ 树因为每次搜索都是从根节点开始往下搜索,所以会遵循最左匹配原则,而我们使用全文搜索时,往往不会遵循最左匹配原则,所以可能会导致索引失效。这时候倒排索引就派上用场了。

es 建立的索引称为倒排索引,在数据插入的时候,就对数据进行统计,将每一个 document 经过分词,分词之后统计出现的频数,这样查询的时候就可以根据查询的词快速定位到某一个数目,同时由于创建的时候统计的频数,可以对具体内容进行排序,可以类比于百度的搜索排名

倒排索引的结构主要包括了两大部分一个是Term Dictionary(单词词典),另一个是Posting List(倒排列表)。Term Dictionary(单词词典)记录了所用文档的单词以及单词和倒排列表的关系。Posting List(倒排列表)则是记录了term在文档中的位置以及其他信息,主要包括文档ID,词频(term在文档中出现的次数,用来计算相关性评分),位置以及偏移(实现搜索高亮)。

FST

如上文所述,在进行全文检索的时候,通过倒排索引中term与docId的关联关系获取到原始数据。但是这里有一个问题,ES底层依赖Lucene实现倒排索引的,因此在进行数据写入的时候,Lucene会为原始数据中的每个term生成对应的倒排索引,因此造成的结果就是倒排索引的数据量就会很大。而倒排索引对应的倒排表文件是存储在硬盘上的。如果每次查询都直接去磁盘中读取倒排索引数据,在通过获取的docId再去查询原始数据的话,肯定会造成多次的磁盘IO,严重影响全文检索的效率。因此我们需要一种方式可以快速定位到倒排索引中的term。

大家想想使用什么方式比较好呢?可以考虑HashMap, TRIE, Binary Search Tree或者Tenary Search Tree等数据结构,实际上Lucene实际是使用了FST(Finite State Transducer)有限状态传感器来实现二级索引的设计,它其实就是一种有限状态机。

我们先来看下 trie树的结构,在Lucene中是这样做的,将倒排索引中具有公共前缀的term组成一个block,如下图所示的cool以及copy,它们拥有co的公共前缀,按照类似前缀树的逻辑来构成trie树,对应节点中携带block的首地址。我们来分析下trie树相比hashmap有什么优点?hashmap实现的是精准查找,但是trie树不仅可以实现精准查找,另外由于其公共前缀的特性还可以实现模糊查找。那我们再看trie树有什么地方可以再进行优化的地方?

 如上如所示,term中的school以及cool的后面字符是一致的,因此我们可以通过将原先的trie树中的后缀字符进行合并来进一步的压缩空间。优化后的trie树就是FST

因此通过建立FST这个二级索引,可以实现倒排索引的快速定位,不需要经过多次的磁盘IO,搜索效率大大提高了。不过需要注意的是FST是存储在堆内存中的,而且是常驻内存,大概占用50%-70%的堆内存,因此这里也是我们在生产中可以进行堆内存优化的地方。

ElasticSearch和传统数据库对比
姚小姚的博克~~~~
03-01 3541
Es对比于传统的数据库关系如下:Relational DB -> Databases -> Tables -> Rows -> Columns Elasticsearch -> Indices -> Types -> Documents -> FieldsElasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可...
ES与DB对应关系
weixin_45545840的博客
02-22 2415
ES数据架构与关系数据库Mysql ES数据架构的主要概念(与关系数据库Mysql对比)     MySQL     ElasticSearch Database Index Table Type Row Document Column Field Schema Mapping Index Everything is indexed SQL ...
ElasticSearch
incgdl的博客
10-29 1717
ElasticSearch入门
Elasticsearch6.4.3文档的映射
art_code的博客
01-21 698
Elasticsearch6.4.3文档的映射 已经把ElasticSearch的核心概念和关系数据库做了一个对比,索引(index)相当于数据库,类型(type)相当于数据表,映射(Mapping)相当于数据表的表结构。ElasticSearch中的映射(Mapping)用来定义一个文档,可以定义所包含的字段以及字段的类型、分词器及属性等等。 文档映射就是给文档中的字段指定字段类型、分词器。...
Elasticsearch与MySQL对应关系
qq_42831771的博客
10-14 980
1.MySQL 中的数据库(DataBase),等价于 ES 中的索引(Index)。 2.MySQL 中一个数据库下面有 N 张表(Table),等价于1个索引 Index 下面有 N 多类型(Type)。 3.MySQL 中一个数据库表(Table)下的数据由多行(Row)多列(column,属性)组成,等价于1个 Type 由多个文档(Document)和多 Field 组成。 4.MySQL 中定义表结构、设定字段类型等价于 ES 中的 Mapping。举例说明,在一个关系数据库里面,Schem.
Elasticsearch 基本概念
Dablelv 的博客专栏。
04-19 3132
文章目录1.存储结构indextypedocumentfieldmapping2.其他重要概念clusternodeshardreplica3.查看版本信息4.小结参考文献 1.存储结构 要想学会使用 ES,完成对 ES 的增删改查,必须先了解一下 ES 的存储结构。 大家对 MySQL 的存储结构应该是很清楚的,所以咱们在学习 ES 存储结构时,同时类比 MySQL,这样理解起来会更透彻。MySQL 的数据模型由数据库、表、字段、字段类型组成,自然 ES 也有自己的一套存储结构。 ES 与 MySQL .
elasticsearch-analysis-dynamic-synonym连接数据库动态更新近义词
04-13
Elasticsearch 分析插件——动态近义词分析器 Elasticsearch 是一款强大的全文搜索引擎,广泛应用于数据检索和分析领域。为了提升搜索质量和用户体验,近义词分析是必不可少的功能。"elasticsearch-analysis-...
MoviesApi_ir:资料来源www.moviesapi.ir
05-16
电影 该存储库包含网站源。 Laravel 5.3框架用于构建此站点。 “视频”已准备好解决两组开发人员的问题:第一组是刚开始学习一种新语言(例如android或ios)的实践者,并且需要一个完整的网络服务来正常学习(例如...
Utilidades_procesar_imagenes_satelitales:一组专门用于处理卫星图像的程序-matlab开发
05-29
在IT领域,卫星图像处理是一项重要的技术,广泛应用于遥感、气象预报、地理信息系统(GIS)等多个行业。本文将深入探讨“Utilidades_procesarimagenes_satelitales”这一组由MATLAB开发的卫星图像处理程序,以及其...
MayaGalili/ParseFiles-PaxDB:函数目标是解析 pax db 文件。-matlab开发
05-29
在IT领域,尤其是在生物信息学和数据处理方面,Matlab是一种常用的编程语言,因其强大的数值计算和可视化功能而受到青睐。本项目“MayaGalili/ParseFiles-PaxDB”专注于解析PaxDB文件,这是一个与蛋白质表达数据相关...
generateSpanningTrees(A):找出连通无向图的所有生成树。-matlab开发
06-01
函数“generateSpanningTrees(A)”为由邻接矩阵A描述的连通无向简单图生成所有生成树。它是“算法S”在p上的实现。 Donald E. Knuth 所著的“计算机编程艺术”一书第 464 卷,第 4A 卷(组合算法,第 1 部分)。...
elasticsearch基础4——es核心名词概念、es节点自动发现机制、节点类型、数据写入流程、对比关系数据库
百慕卿君博客
02-14 1615
1.es核心名词概念,包括分片、路由的使用等。 2.es节点自动发现机制。 3.节点类型介绍。 4.数据写入流程、分段存储、延迟写策略、段合并机制、乐观锁、对比关系数据库、副本常识
Elasticsearch文档数据库
最新发布
weixin_54536498的博客
08-10 207
如果请求参数中包含新的属性(原文档中没有的属性),也会更新成功,且在文档中新增新的属性!提示:添加文档时,如果索引不存在,会自动创建索引,如果类型不存在,会自动创建类型!注意:以上做法将使用请求参数替换原有的整篇文档!:如果尝试删除的文档不存在,将响应。:如果尝试删除的索引不存在,将响应。
es_MySQL、HBase、ElasticSearch三者对比详解
chuige2013的博客
03-11 2952
MySQL:关系数据库,主要面向OLTP,支持事务,支持二级索引,支持sql,支持主从、Group Replication架构模型(本文全部以Innodb为例,不涉及别的存储引擎)。HBase:基于HDFS,支持海量数据读写(尤其是写),支持上亿行、上百万列的,面向列的分布式NoSql数据库。天然分布式,主从架构,不支持事务,不支持二级索引,不支持sql。
Elasticsearch对应MySQL的对应关系
weixin_44257023的博客
12-06 2707
对应关系表 根据表格对应,来理解Elasticsearch Elasticsearch MySQL 索引库(indices) Database 数据库 类型(type) Table 数据表 文档(Document) Row 行 域字段(Field) Columns 列 映射配置(mappings) 每个列的约束(类型、长度) 对Elasticsearch相关概念说明 概念 说明 索引库(indices) indices是index的复数,代表许多的索引
elasticsearch快速入门
chaochao2113的博客
05-21 323
elasticsearch快速入门 1.elasticSearch核心概念的介绍 索引(index) 一个索引可以理解成一个关系数据库 类型(type) 一种type就像一类表,比如user表,order表 注意: ES 5.x中⼀个index可以有多种type。 ES 6.x中⼀个index只能有⼀种type。 ES 7.x以后已经移除type这个概念。 映射(mapping) mapping定义了每个字段的类型等信息,相当于关系数据库中的表结构。 文档 一个docume
ES数据类型与数据库、excel对照
春风化雨
12-07 233
ES数据库一个excel表格文件(文件)索引 index库 database一个excel表格文件(文件)类型 _doc表 tableexcel工作文件中的表(表)json 数据的 key字段 field一个表中有多个列(列)json 数据的 value内容值这一列中的内容(某一列的内容)文档 doc记录表格中的某一行参考:Day3-17-今日总结_哔哩哔哩_bilibili
es学习笔记
mrb1289798400的博客
04-25 330
一、es基本知识 和关系数据库关系: es中的index对应数据库 es中的type对应表(7.0版本以后废除) es中的mapping对应表结构 es中的document对应表行记录 es中的columns对应表字段 二、es核心优势 横向可扩展性:只需要增加台服务器,做一点儿配置,启动一下Elasticsearch就可以并入集群。 分片机制提供更好的分布性:同一个索引分成多个分片(sharding), 这点类似于HDFS的块机制;分而治之的方式可提升处理效率。 高可用:提供复.
ElasticSearch索引对比MySQL索引
var200的博客
08-20 672
前言 这段时间在维护产品的搜索功能,每次在管理台看到 elasticsearch 这么高效的查询效率我都很好奇他是如何做到的。 这甚至比在我本地使用 MySQL 通过主键的查询速度还快。 为此我搜索了相关资料: 这类问题网上很多答案,大概意思呢如下: ES 是基于 Lucene 的全文检索引擎,它会对数据进行分词后保存索引,擅长管理大量的索引数据,相对于 MySQL 来说不擅长经常更新数据及关联查询。 说的不是很透彻,没有解析相关的原理;不过既然反复提到了索引,那我们就从索引的角度来对比下两者的差异。

Java领域优质创作者

132
原创
4362
点赞
3742
收藏
1万+
粉丝
关注
私信
写文章

热门文章

  • 图书管理系统【java】 10703
  • 自动化测试之JUnit单元测试框架 8338
  • 【C语言进阶考试】你是否真正学懂了C语言 6349
  • 博客系统(页面设计) 6252
  • HTTP 协议 5500

分类专栏

  • 论坛系统 18篇
  • JavaSE 16篇
  • JavaEE 14篇
  • Spring 16篇
  • 数据结构 6篇
  • MySQL 3篇
  • ​ElasticSearch 1篇
  • JVM 2篇
  • git 1篇
  • redis
  • 软件测试 6篇
  • 牛客网 16篇
  • 前端 4篇
  • C语言 28篇

最新评论

  • 11.关注、取消关注 + 关注列表、粉丝列表

    2401_86403199: 关注上限调整为20000

  • JDK 8 到 JDK 11 中 GC 日志参数变化

    普通网友: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,文章思路清晰【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 自动化测试之JUnit单元测试框架

    普通网友: 写的真好!我也写了一篇获取【大厂面试真题解析、核心开发学习笔记、最新全套讲解视频、实战项目源码讲义、学习路线简历模板】的文章

  • 14.Spring2.7.x 整合 Elasticsearch7.17

    m0_52238756: 为什么我springboot 2.7.10 +es 7.17.0 ,就已经不能在类上写type了

  • 18.将文件上传至云服务器 + 优化网站的性能

    ARMCSKGT: 博主写的很好,逻辑比较清晰,学习到了,感谢博主的分享。欢迎大佬来我这参观~

最新文章

  • 拦截器与过滤器
  • JDK 8 到 JDK 11 中 GC 日志参数变化
  • git 冲突与解决冲突
2024年9篇
2023年77篇
2022年46篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗小温

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司重庆网站设置优化濮阳网站优化选哪家上海seo网站优化金山区公司网站优化定制方案优质的网站排名优化软件网站优化方式有哪些好的优化网站新的网站怎么优化龙井市网站seo优化排名seo 网站地图优化博滇网站seo优化中心网站优化推广在哪里做套模板的网站怎么做优化网站云优化工具罗湖网站关键词优化哪家强简单网站优化服务外包怎么优化网站题目沈阳网站制作优化技巧梅州关键词网站优化太原网站优化推广优点安庆市网站seo优化排名建湖网站优化推广徐汇区专业网站优化价格费用网站标题怎么优化网站关键词排名优化服务公司湖南网站关键词排名优化推荐网站排名优化忄金手指科杰南宁网站优化维护临沂网站首页优化网站优化属于什么职位香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化