ES源码阅读过程
HTTP请求的controller:RestController
游标的作用 相当于建立了一个 limit的priorityqueue 不用游标的话,相当于建立一个limit+offset的priorityqueue 若没有游标,则会导致没有有的请求limit过大,导致tp99超时
explain = true 解释每一个打分 profile=true 查看每一项耗时
RestHandler 根据request的信息,装配基础的setting (clustername port and so on)
transportaction类 作为transport的执行器,真正对request 进行 execute的类,其中会有多个继承类用于实现具体的transportsearchaction服务
refresh左右在于open search 使新加入的segment可见,后台会每1秒 执行一次 refresh(这是elasticsearch 能近实时的原因),flush是将segment持久化到硬盘上,使其durable,同时建立一个commit point,同时删除trancation log
search after 的原理相当于构建了一个固定size的stack 用于排序,实现的方式在于会拿到上次结果中最后的打分值,那么在当前请求下,只需要往这个stack中放入大约上次打分值的doc就可以了,也可以从这个角度发现 search after 是 stateless的,会有出现重复数据的可能。
scroll 相当于会将at this time 的索引构建一个快照,此快照通过每一次的请求中timeout 保证search contenxt alive ,由此再下一次请求的时候,通过之前的access token ,就直接拿对应位置下一页请求就可以了,可以发现 scroll是state的,但是数据是出现老数据。
query入口:所有的query都会打在queryphrase类中execute方法
must should query 才会打分,filter不会打分
_开头的但从都为es关键字
aggs: value_count aggs 是计算有指定field在parent aggs中每一个key下有值的数量(compute over 概念)。 pipeline aggs 顾名思义,在当前aggs中通过pipeline的方式计算aggs,在当前aggs 可以引用变量值且可以使用脚本执行过滤等操作。
master node 用于维护集群分片的信息 shard balance,data node 每一个都可以当协调节点(coordinate node)用于query、fetch、coorderinate data 每一个datanode中 可以进行分片,分片分为primary shard 和 replica shard,区别之处在于索引构建在primary shard上,通过拷贝的方式复制到 replica shard。
segment是immutable的,所以indexrequest的过程是如果原先index中已有一个相同的id的doc,那么会首先标记原doc为删除,然后添加当前doc,可见过程分为get then index 该操作等价于 whole doc update. UpdateRequest可以保证Partial Update,其原理在于找到shard对应的doc,然后在当前shard下进行merge,然后标记原doc为删除,添加当前doc,相比indexRequest 减少了网络传输。
ES源码阅读过程的更多相关文章
- Yii2.0源码阅读-一次请求的完整过程
Yii2.0框架源码阅读,从请求发起,到结束的运行步骤 其实最初阅读是从yii\web\UrlManager这个类开始看起,不断的寻找这个类中方法的调用者,最终回到了yii\web\Applicati ...
- Linux 0.11源码阅读笔记-中断过程
Linux 0.11源码阅读笔记-中断过程 是什么中断 中断发生时,计算机会停止当前运行的程序,转而执行中断处理程序,然后再返回原被中断的程序继续运行.中断包括硬件中断和软件中断,硬中断是由外设自动产 ...
- 【原】FMDB源码阅读(一)
[原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...
- 【原】AFNetworking源码阅读(五)
[原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...
- 【原】AFNetworking源码阅读(三)
[原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...
- 【原】AFNetworking源码阅读(二)
[原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...
- 【原】AFNetworking源码阅读(一)
[原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...
- [PHP源码阅读]explode和implode函数
explode和implode函数主要用作字符串和数组间转换的操作,比如获取一段参数后根据某个字符分割字符串,或者将一个数组的结果使用一个字符合并成一个字符串输出.在PHP中经常会用到这两个函数,因此 ...
- 【原】SDWebImage源码阅读(五)
[原]SDWebImage源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 前面的代码并没有特意去讲SDWebImage的缓存机制,主要是想单独开一章节专门讲 ...
随机推荐
- <Wonder Woman> 摘抄
<Wonder Woman> My father told me once, he said,“ If you see something wrong happening in the w ...
- IDEA 优化使用配置
IDEA设置鼠标滑轮改变字体大小 点击 File - settings,找到 Editor - General,如图所示,勾上 Change font size(Zoom) with Ctrl+Mou ...
- cf936B
题意简述:给出一个有向图,问从s出发是否能找到一条长度为奇数的路径并且路径的端点出度为0,存在就输出路径,如果不存在判断图中是否存在环,存在输出Draw,否则输出lose 题解:类似于DP,将每一个点 ...
- Java Web 笔记(4)
11.Filter (重点) Filter:过滤器 ,用来过滤网站的数据: 处理中文乱码 登录验证-. Filter开发步骤: 导包 编写过滤器 导包不要错 实现Filter接口,重写对应的方法即可 ...
- vue(七)--监听属性(watch)
1.watch:用来监听每一个属性的变化 2.watch这个对象里面都是函数,函数的名称是data中的属性名称,watch中的函数不需要调用 3.当属性发生改变那么就会触发watch函数,每个函数都会 ...
- TotalUninstall6破解步骤卸载软件更彻底更专业
软件包分享,这里使用的是6.24版本 链接:https://pan.baidu.com/s/1aVd6bclk5A6puyWBfAOA2A提取码:mhl9 接下来开始安装 安装步骤: 点击安装.基本上 ...
- C#面向对象详解
//封装就是将数据或函数等集合在一个个的单元中,我们称之为类,被封装的对象通常被称为抽象数据类型, //封装的意义在于保护或防止代码被我们无意中破坏, //封装既可以封装成员变量,又可以封装成员方法, ...
- 【笔记】机器学习 - 李宏毅 - 7 - Deep Learning
深度学习发展历史: 感知机和逻辑回归很像,只是没有\(sigmoid\)激活函数. 深度学习训练的三个步骤: Step1:神经网络(Neural network) Step2:模型评估(Goodnes ...
- 用JavaScript设计和创建对象
通过在优锐课的java学习分享中,get很多学习新技能,分享给大家参考学习. 介绍 在阅读此分步指南之前,你可能需要关注面向对象编程的介绍. 以下步骤中包含的Java代码与该文章理论中使用的Book对 ...
- unity目前学的一些操作
目前是根据b站的一位迈扣老师的30集基础教学学习的,用的是sunny land这个资源包进行的教学,这位老师讲得很清晰,吐词清晰,思路也清晰,推荐哦.其实我比较喜欢这样的老师,思路 吐词清晰.就像以前 ...