首页 > 其他分享 >对面试官说精通elastic search之底层原理解读(面试可用)

对面试官说精通elastic search之底层原理解读(面试可用)

时间:2024-09-30 16:22:01浏览次数:6  
标签:search elastic segment 面试官 文档 term 分片 词项 节点

一串文本,先经过分词 分成词项 被称为term。我们要搜索一个词项的时候,如果挨个遍历时间复杂度是0n 为了解决查询速度,可以将词项按从小到大排序,排序过后通过二分查找的方法,将时间复杂度优化为 ologn,这就组成了一个term dictionary,词项对应的doc id就叫posting list,这两个共同组成了倒排索引。由于term dictionary数据量很大,放在内存不现实,只能放在磁盘,这样的话查询速度很慢,为了解决这个问题,引入了term index。
term index主要是将词项和词项之间相同的前缀提取出来,构建成一个精简的目录树,存放词项在磁盘中的偏移量,也就是指向磁盘的位置,这个目录树放在内存中,用来加速搜索。我们查询某个词项的时候只需要搜索term index,就能找到词项在term dictionary中的大概位置,再跳转到term dictionary。前面的倒排索引搜索到的是doc id,为了找到文档内容本身,需要有一个地方存储完整的文档内容,就是stored fields 行式存储,这样我们就可以通过doc id找到完整的文档内容,但是用户经常要查询排序后的内容,可以从业务上先从stored搜索出来在进行排序,但也有更高效的做法。我们可以直接将某个字段集中存放。
这四个东西共同组成了一个符合文件 segment,具备完整搜索功能的最小单元。我们可以用多个文档生成一份segment,如果新增文档,就写一个新的segment,老segment只负责读,segment多了就并发的读多个。随着数据量增大,segment越来越多,文件句柄消耗的越来越多,不定期合并segement merging,这个就叫lucene 单机文本检索库。

es分为主节点,数据节点,协调节点
es的写入流程 写入请求先发到集群中的协调节点,协调节点根据hash路由判断该写入哪个数据节点中的分片,找到主分片写入,底层是lucene,所以最终是写到了segment内将数据固化为倒排索引 stored field doc values这些结构。
主分片写完后 将数据同步给副本分片,副本分片写入万抽,主分片会响应协调节点返回一个ack,最后协调节点相应客户端应用写入完成。

es搜索分为查询阶段和获取阶段

客户端发起搜索请求,请求会先发到集群的协调节点,协调节点根据index name了解被分成了几个分片,以及这些分片在哪数据节点上,将请求转发到分片上。请求到达分片后,分片底层lucene会并发的搜索segment,利用倒排索引找到文档id,结合doc values获得排序信息,并将结果聚合返回给协调节点,协调节点将多个分片中拿到的数据进行一次聚合,舍弃不需要的数据。

获取阶段 协调节点拿着文档id请求数据节点中的分片,lucene会从segment内的stored field读取到完整文档,返回给协调节点,最终将数据返回给客户端。

以上来源个人总结,转载请注明出处,一经发现将提起法律诉讼 

标签:search,elastic,segment,面试官,文档,term,分片,词项,节点
From: https://blog.csdn.net/qq_37034181/article/details/142659325

相关文章

  • ElasticSearch 备考 -- 备份和恢复
    一、题目备份集群下的索引task,存储快照名称为snapshot_1二、思考这个涉及的是集群的备份,主要是通过创建快照,涉及到以下2步骤Setp1:注册一个备份 snapshotrepositorySetp2:创建snapshot三、解题es支持多种方式,例如:亚马逊云、谷歌云存储、本地文件系统等。这里我们......
  • 1043 Is It a Binary Search Tree——PAT甲级
    ABinarySearchTree(BST)isrecursivelydefinedasabinarytreewhichhasthefollowingproperties:Theleftsubtreeofanodecontainsonlynodeswithkeyslessthanthenode'skey.Therightsubtreeofanodecontainsonlynodeswithkeysgreater......
  • 面试官:请你说一下你项目中的亮点
    在面试中,基本上都会有这么个问题:请你说一下你项目中的亮点。很多人都会一脸懵,完全不知道如何回答,最后的效果就是要么offer飞了,要么薪资被压了。如果你的项目是分布式架构模式,具备高并发的项目,那你可以总结一下,这个相对就好应对。如果你的项目具备大数据,也可以准备一下,都......
  • CentOS 7.9安装ElasticSearch7.14.0、ElasticSearch-Head、Kibana、Node14.18.2
    CentOS7.9安装ElasticSearch7.14.0、ElasticSearch-Head、Kibana、Node14.18.2 1.安装文件1.elasticsearch-7.14.0-linux-x8664.tar.gz2.elasticsearch-head-master.zip3.jdk-11linux-x64bin.tar.gz4.kibana-7.14.0-linux-x8664.tar.gz5.node-v14.18.2-linux-......
  • 自己封装Elasticsearch,下载到本地仓库复用
    拉取代码git拉取yxh-elasticsearch:es基本封装工具拉完修改你可以根据自己去修改这些代码,最后install加package,就打到了本地maven仓库,调用的时候也非常方便,可以看下文。介绍注解一共有三个自定义注解@DocumentIndex作用一共四个字段,indexName是用于你在实......
  • ElasticSearch初体验
    我的网站集成ElasticSearch初体验   最近,我给我的网站(https://www.xiandanplay.com/)尝试集成了一下es来实现我的一个搜索功能,因为这个是我第一次了解运用elastic,所以如果有不对的地方,大家可以指出来,话不多说,先看看我的一个大致流程   这里我采用的sdk的版本是El......
  • day01-elasticstack-all
    一.elasitcstack概述什么是ElasticStack?所谓的ElasticStack别名为elkstack。ELK指的是三个技术栈: -ElasticSearch,简称:es 数据库,应用场景为数据的快速检索。 但凡和搜索框相关的,都会用ES进行数据的查询。 -Logstash: 采集数据,日志聚合,处理数据,将数据写入到ES......
  • ElasticSearch倒排索引
    一、ElasticSearch基本概念        Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsear......
  • 反问面试官:如何实现集群内选主
    面试官经常喜欢问什么zookeeper选主原理、什么CAP理论、什么数据一致性。经常都被问烦了,我就想问问面试官,你自己还会实现一个简单的集群内选主呢?估计大部分面试官自己也写不出来。本篇使用Java和Netty实现简单的集群选主过程的示例。这个示例展示了多个节点通过投票选举一......
  • thinkphp项目中集成使用 Elasticsearch
    文章目录前言1.安装Elasticsearch2.安装ElasticsearchPHP客户端3.配置Elasticsearch连接4.使用Elasticsearch5.注意事项总结前言在ThinkPHP项目中集成使用Elasticsearch,你需要遵循几个步骤来确保Elasticsearch能够顺利地在你的项目中运行。以下是一个......