ES搜索引擎

ES定义

ES=elaticsearch简写, Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

ES主要解决问题

1)检索相关数据;
2)返回统计结果;
3)速度要快。

ES的分布式架构原理

ElasticSearch设计的理念就是分布式搜索引擎,实质上实际上还是基于lucene。

es中存储数据的基本单位是索引,某些说你现在要在es中存储一些订单数据,你就应该在es中创建一个索引order_idx,所有的订单数据就都写到这个索引里面去,一个索引差不多就是相当于是mysql里的一张表。

一个index里可能就一个类型,但是确实如果说是一个index里有多个type的情况(注意,mapping types这个概念在ElasticSearch 7.X已被完全删除,详细说明可以参考官方文档),您可以认为index是一个类别的表,具体的每个类型代表mysql中的一个表。每个type有一个映射,如果您认为一个type是具体的一个表,index就代表多个type同属于的一个类型,而映射就是这个类型的表结构定义,你在mysql中创建一个表,肯定是要定义表结构的,里面有什么区别,每个分开是什么类型。实际上你往索引里的一个类型里面写的一条数据,叫做一条文档,一条文档就代表了mysql中某个表里的一行,每个文档有多个字段,每个字段就代表了这个文档中。
在这里插入图片描述1)创建一个索引index,这个索引可以被分割成多个shard,每个shard存储部分数据。分割多个shard的好处在于,支持横向扩展,每个shard存储一部分数据,当数据增加的时候可以重新创建一个切割成多个的shard满足这个数据增加的情况。另外提高性能,数据分布在多个shard上,即多台服务器上,所有的操作都会在多台服务器上并行执行,提高防爆和性能。

2)这个shard的数据实际上是有多个备份,每个shard都有一个primary shard,负责写入数据,还有几个replica shard。primary shard写入数据之后,就会将数据同步到其他的replica shard上去。

3)ES中有多个节点,会自动选举一个例程为master节点,这个master例程实际上就是干一些管理的工作,从而维护元数据,也可以成为协调节点。

4)如果非master节点宕机后,那么会由master节点中断,如果宕机的那个节点是primary shard,master节点会自动将其他的replica节点转换为primary节点继续工作。

ES写数据过程

在这里插入图片描述

1)客户端选择一个es节点将数据发送过去,这个节点的数据就是coordinating node(协调节点)

2)协调节点通过对数据进行Hash算法,并对文档数据进行路由,将请求转发给对应的节点(具有primary shard)。

3)实际的节点上有一个primary shard处理请求,然后将数据同步到replica节点上,协调节点发现primary node和replica node都搞定之后,就返回响应结果给客户端。

4)实际的节点上有一个primary shard处理请求时,会将数据写入到内存buffer中,在缓存中的数据是搜索不到的;在这里也可以将数据写入到translog中,也可不写入。每个一秒将数据refresh到os cache中,数据refresh中,这个数据就可以被搜索到了。(所以es是准实时的,因为写入的数据1秒之后才可以看到,也可以通过es的restful api或者java api,手动执行一次refresh操作,就是手动将buffer中的数据刷入os cache中,让数据立马就可以被搜索到。只要数据被输入os cache中,buffer就会被清空了,因为不需要保留buffer了,数据在translog里面已经持久化到磁盘去一份了,在此同时也可以将数据写入到translog中。translog日志文件的作用是什么?您执行提交操作之前,数据或是停留在buffer中,或者是停留在os cache中,无论是buffer还是os cache都是内存,一旦这台机器死了,内存中的数据就全丢了。所以需要将数据对应的操作写入一个专门的日志文件translog中,立即此时机器停机机,再次重启的时候,es会自动读取日志文件中的数据,恢复到内存缓冲区和os cache中去。)

5)translog其实也是先写os cache的,**至少每隔5秒刷一次到磁盘中去,所以每次情况下,可能有5秒的数据会仅停留在buffer或translog文件的os cache中,如果此时机器挂了,会丢失 5秒钟的数据。但是这样性能比较好,最多丢5秒的数据。**也可以将translog设置成每次写入操作必须是直接fsync到磁盘,但是性能会差很多。

ES读数据过程

1)可以通过doc id来查询,会根据doc id进行hash,判断出来当时把doc id分配到了其中shard上面去,从那个shard去查询。

2)客户端发送请求到coordinate node(协调节点),协调节点对doc id进行哈希路由,将请求转发到对应的节点,此时会使用round-robin 随机迭代算法,在orimary shard以及所有副本中随机选择一个。

3)接收请求的节点返回文档给coordinate code(协调节点),协调节点返回数据给客户端。

删除/更新数据灵活原理

如果是删除操作,commit的时候会生成一个.del文件,里面将某个doc标识为deleted状态,那么搜索的时候根据.del文件就知道这个doc是否被删除了。

如果是更新操作,就是将原来的doc标识为deleted状态,然后新写入一条数据。

缓冲每刷新一次,就会产生一个segment file,所以交替情况下是1秒钟一个segment file,这样下来segment file会越来越多,此时会定期执行merge。每次merge的时候,交替多个segment file合并成一个,同时在此处插入标识为deleted的doc给物理删除掉,然后将新的segment file写入磁盘,这里会写一个commit point,标识所有新的segment file,然后打开segment file供搜索使用,同时删除旧的segment file。

倒排索引

在搜索引擎中,每个文档都有一个对应的文档ID,文档内容被表示为一系列关键字的集合。例如,文档1经过分词,提取了20个关键字,每个关键字都会记录它在文档中出现的次数和出现位置。

然后,倒排索引就是关键字到文档 ID的映射,每个关键字都对应着一段的文件,这些文件中都出现了关键字。

倒排索引的两个重要细节:

  • 倒排索引中的所有词项对应一个或多个文档;
  • 倒排索引中的词项根据字典顺序升序排列

ES在数据量很大的情况下(数十亿等级)如何提高查询效率在这里插入图片描述

es的搜索引擎严重依赖于不断的filesystem cache,你如果给filesystem cache更多的内存,尽量让内存可以容纳所有的idx segment file索引数据文件,那么你搜索的时候就基本都是走内存的,性能会非常高。

归根结底,你要让es性能要好,最佳的情况下,就是你的机器的内存,至少可以容纳你的总数据量的一半。

es + hbase
hbase的特点是适用于海量数据的在线存储,就是对hbase可以写入海量数据,但是不要做复杂的搜索,做很简单的一些根据id或范围进行查询的这么一个操作就可以了。根据名称和age去搜索,拿到的结果可能就20个doc id,然后根据doc id到hbase里去查询每个对应doc id的完整的数据,给对应来,再返回给前端。

数据预热

举个例子,拿微博来说,你可以把一些大V,平时看的人很多的数据,你自己预先后台搞个系统,每隔一会儿,自己的后台系统去搜索一下热数据,刷到filesystem cache里去,后面用户实际上来看这个热数据的时候,他们就是直接从内存里搜索了,很快。

或者是电商,你可以将平时查看最多的一些商品,例如说iphone 8,热数据提前后台搞个程序,每隔1分钟自己主动访问一次,刷到filesystem cache里去。

对于那些你觉得比较热的,经常会有人访问的数据,最好做一个专门的缓存预热磁盘,就是**对热数据每隔交替,就提前访问一下,让数据进入filesystem cache里面去。**这样一次别人访问的时候,性能一定会好很多。

泡沫之夏Z
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ES搜索引擎入门+最佳实践(一)
柳老师的博客
08-03 2790
本篇文章计划给大家介绍什么ES,ES的架构,以及ES搜索入门.我尽量用简单不拖沓的语言给大家介绍,水平有限,时间也有限,各位读者如发现文中有不当之处,请留言指正.ES的全称是Elasticsearch,翻译过来就是弹性搜索,知道就可以,不用纠结这个词的含义,我觉得这个词并不能表述ES的含义.ES并不是传统意义上的数据库,所以不需要用传到的数据库例如Oracle,mysql等数据库与ES进行类比.ES是建立在Lucene(全文搜索)基础上的分布式准实时搜索引擎.
全文检索 Elasticsearch(简称es)
热门推荐
CORN的博客
06-04 1万+
全文检索 Elasticsearch 研究 1. ElasticSearch 介绍 1.1 介绍 **Elasticsearch**是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档。Elasticsearch是用Java开发的,并在Apache许可证下作为开源软件发布。官方客户端在Java、.NET(C#)、PHP、Py...
ElasticSearch全文搜索引擎
Casual_Lei的博客
06-13 1877
​ Lucene是apache下的一个开源的全文检索引擎工具包(一堆jar包)。它为软件开发人员提供一个简单易用的工具包(类库),以方便的在小型目标系统中实现全文检索的功能。Lucene适用于中小型项目 ,ES适用于中大型项目(它底层是基于lucene实现的)​ 虽然全文搜索领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。但是,Lucene只是一个库。
ES(Elasticsearch 全文检索
不瘦25斤不改名
04-08 2219
对文档的内容进行分词,对词条创建索引,记录词条所在的文档信息根据词条查询到文档的id 从而查到文档。es是面向文档存储的可以是数据库中的一条商品数据订单信息,文档会被序列化为json后存储在es中。根据文档的id创建索引 查询词条必须先找到文档完了判断是否包含词条。删:DELETE /indexName/_doc/docId。增:POST /indexName/_doc/docId。差:GET /indexName/_doc/docId。es:擅长海量数据的搜索、分析、计算。
分布式搜索——ES的基本使用
xian2h的博客
02-29 369
springcloud组件——elasticsearch的基本功能
delphi报列表索引越界怎么处理_Elasticsearch如何做到快速检索,倒排索引的秘密
weixin_39669982的博客
11-28 452
"All problems in computer science can be solved by another level of indirection.”– David J. Wheeler“计算机世界就是 trade-off 得艺术”一、前言最近接触的几个项目都使用到了 Elasticsearch (以下简称 ES ) 来存储数据和对数据进行搜索分析,就对 ES 进行了一些学习。本文整理...
ElasticSearch搜索引擎教程实战篇
09-19
ElasticSearch搜索引擎教程实战篇是ElasticSearch搜索引擎的实践教程,旨在帮助读者从基础知识到高级应用掌握ElasticSearch搜索引擎的使用。该教程涵盖了ElasticSearch搜索引擎的基础概念、安装、配置、使用Kibana、...
Es搜索引擎
05-14
**Elasticsearch 搜索引擎详解** Elasticsearch 是一个开源的全文搜索引擎,它基于 Lucene 库,并且提供了分布式、RESTful 风格的搜索和数据分析能力。Elasticsearch 的设计目标是易于使用、可扩展性强、实时性高,...
es搜索引擎.doc
10-16
**Elasticsearch 搜索引擎详解** Elasticsearch(ES)是一个高效、可扩展的分布式搜索服务器,基于Apache Lucene构建,具有丰富的功能和强大的性能。它不仅提供了开箱即用的体验,还通过RESTful接口简化了Lucene的...
ElasticSearch 全文搜索引擎;从0到1教你学会ES 搜索引擎
最新发布
07-19
ElasticSearch 全文搜索引擎;从0到1教你学会ES 搜索引擎
es搜索引擎配置文件完整配置版本
08-23
**Elasticsearch搜索引擎配置文件详解** Elasticsearch(ES)是一种流行的开源全文搜索引擎,基于Lucene构建,提供了分布式、 RESTful 风格的搜索和分析功能。在ES的运行过程中,配置文件起着至关重要的作用,它们...
elasticsearch生产集群部署-脑裂问题
江勇的博客
09-19 882
最少master候选节点以及脑裂问题 discovery.zen.minimum_master_nodes 参数对于集群的可靠性来说,是非常重要的。这个设置可以预防脑裂问题,也就是一个集群中存在两个master。 如果因为网络的故障,导致一个集群被划分成了两片,每片都有多个node,以及一个master,那么集群中就出现了两个master了。但是因为master是集群中非常重要的一个角色,...
全文检索引擎Solr系列—–全文检索基本原理
YaoXTao的专栏
08-18 1444
全文检索引擎Solr系列—–全文检索基本原理
ES原理解读
软件界的鼬神
08-16 2501
ES原理解读 摘要:本篇文章仅仅是谈谈个人对ES原理的理解,可能理解不对的地方,欢迎大家指出。 概念 ES就是elasticsearch,专门做文本搜索,其重要组件是Lucence。 Lucence就是一个jar包,它的主要功能就是提供封装好的各种索引算法、生成倒排索引等。 ES是基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全问搜索引擎,且ES支持RestFulweb风格的url访问。ES是基于Java开发的开源搜索引擎,设计用于云计算,能够达到实时搜索,稳定、可靠、快速。此外,ES
计算机检索技术的原理,全文检索有哪些技术原理和过程
weixin_39611208的博客
07-15 845
全文索引用于处理大文本集合,利用它人们可以在海量文本中快速获取需要的信息。下面是学习啦小编整理的全文索引的内容,欢迎阅读。全文索引的介绍全文索引技术是目前搜索引擎的关键技术。试想在1M大小的文件中搜索一个词,可能需要几秒,在100M的文件中可能需要几十秒,如果在更大的文件中搜索那么就需要更大的系统开销,这样的开销是不现实的。所以在这样的矛盾下出现了全文索引技术,有时候有人叫倒排文档技术。全文检索技...
Elasticsearch分布式搜索引擎
weixin_52072921的博客
01-14 961
优点:支持随机翻页缺点:深度分页问题,默认查询上限(from + size)是10000场景:百度、京东、谷歌、淘宝这样的随机翻页搜索优点:没有查询上限(单次查询的size不超过10000)缺点:只能向后逐页查询,不支持随机翻页场景:没有随机翻页需求的搜索,例如手机向下滚动翻页scroll优点:没有查询上限(单次查询的size不超过10000)缺点:会有额外内存消耗,并且搜索结果是非实时的场景:海量数据的获取和迁移。从ES7.1开始不推荐,建议用 after search方案。
分布式搜索引擎Elasticsearch开发实战基础篇
11-14
本教程旨在带领大家进入搜索引擎领域,从无到有,深入浅出的讲解了什么是搜索引擎搜索引擎的作用以及ElasticSearch在实际工作中的作用等。
ES简介及倒排索引
qq_28834355的博客
02-06 8757
文章目录什么是ESES的核心概念ES倒排索引 什么是ESES是Elasticsearch的简称,Elasticsearch是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎。Lucene只是一个框架,要充分利用它的功能,需要使用JAVA,并且在程序中集成Lucene,学习成本高,且Lucene确实非常复杂。 特点: 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索 实时分析的分布式搜索引擎 可以扩展到上百台服务器,处理PB级别的
ES分布式搜索原理分析
发现问题,面对问题,分析问题,解决问题,总结问题
11-10 2225
文章目录基本介绍查询阶段取回阶段 基本介绍 一个CRUD操作只处理一个单独的文档。文档的唯一性由_index, _type和routing-value(通常默认是该文档的_id)的组合来确定。这意味着我们可以准确知道集群中的哪个分片持有这个文档。 找到所有匹配的文档只完成了这件事的一半。在搜索(search)API返回一页结果前,来自多个分片的结果必须被组合放到一个有序列表中。因此,搜索的执行过程分两个阶段,称为查询然后取回(query then fetch)。 在初始化查询阶段(query phase),

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • jdk1.8的hashmap真的是大于8就转换成红黑树,小于6就变成链表吗????? 5970
  • 安全组概述 3185
  • ES搜索引擎 2578
  • 什么场景使用了mq?直接掉接口不行吗? 2191
  • Spring boot 读取配置文件(application.yml)中的属性值 864

分类专栏

  • mybatis 1篇

最新评论

  • jdk1.8的hashmap真的是大于8就转换成红黑树,小于6就变成链表吗?????

    Free的午后: 3<= x <= 6 可能会树化

  • jdk1.8的hashmap真的是大于8就转换成红黑树,小于6就变成链表吗?????

    MaYuKang: 学习了

  • jdk1.8的hashmap真的是大于8就转换成红黑树,小于6就变成链表吗?????

    offerNotFound: 真严谨!

  • jdk1.8的hashmap真的是大于8就转换成红黑树,小于6就变成链表吗?????

    王祥คิดถึง: 表情包

  • Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别?

    买房也用券: 火箭 MQ已经在apache孵化成功了吧

大家在看

  • 【成品论文】2024年华为杯研究生数学建模比赛E题高质量成品论文分享(点个关注,后续会更新 493
  • SpringBoot--初入SpringBoot 346
  • C++ Qt 登录界面 Login 315
  • 单链表<数据结构 C版> 1050
  • sqli-labs-master/Less-2~4/ 375

最新文章

  • 搭建 Jenkins
  • Rabbitmq服务器的搭建
  • 深入理解 Java 并发之 synchronized 实现原理
2020年29篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

PHP网站源码南联设计网站荷坳百度竞价沙井SEO按天计费沙井SEO按天扣费宝安企业网站建设惠州企业网站设计坪地网络广告推广双龙seo优化东莞网页设计龙岗模板网站建设木棉湾网站设计龙华外贸网站制作罗湖关键词按天计费福永网站推广工具龙华网站设计沙井企业网站建设光明网站推广系统东莞阿里店铺托管南山网络营销塘坑网络营销福永营销型网站建设民治网站设计模板龙岗企业网站设计盐田百度标王吉祥网站优化按天计费大运百度爱采购同乐网站制作大鹏企业网站设计木棉湾关键词排名包年推广布吉外贸网站制作歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化