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的缓存机制,主要是想单独开一章节专门讲 ...
随机推荐
- Hadoop-HDFS(HDFS-HA)
HDFS(Hadoop Distributed File System) 分布式文件系统,HDFS是一个高度容错性的系统,适合部署在廉价的机器上.HDFS能提供高吞吐量的数据访问,非常适合大规模数据集 ...
- ASP.NET Core DI概述
众所周知,ASP.NET Core有一个DI框架,应用程序启动时初始化. 预定义依赖 1: IApplicationBuilder:提供了配置应用程序的请求管道机制 2:ILoggerFactory: ...
- libmodbus库linux 嵌入式设备中的使用
libmodbus库的交叉编译:1]到libmodbus官网https://libmodbus.org/download/下载安装包,内部自带configure文件,官网推荐v3.1.6稳定版.另外注 ...
- SQL内容补充
一.where和having 1.where 后不能跟聚合函数,因为where执行顺序大于聚合函数. 2. where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前 ...
- What is NodeJS(学习过程)
为什么要学习node.首先是听说了这个和前后端分离有很大的关系.node作为一个基础的技术,需要提前学习.学习node,不打算直接先跟着视频去学习老师们的课程.因为想自己找到一种适合自己的学习方法.之 ...
- Vue(八)---组件(Component)
组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码. 注册一个全局组件语法格式如下: Vue.component(tagName, optio ...
- P5443 [APIO2019]桥梁 [分块+并查集]
分块+并查集,大板子,没了. 并查集不路径压缩,可撤销,然后暴力删除 这样对于每个块都是独立的,所以直接搞就行了. 然后块内修改操作搞掉,就是单独的了 // powered by c++11 // b ...
- Vue如何动态配置img标签的图片源src
(一)首先通过绑定数据给src提供图片地址 <template> <div> <img :src=image_path /> </div> </t ...
- mac 电脑画图软件相关
sketchbook 免费但是不太好用 sketch, https://www.newasp.net/soft/327640.html 注意:安装前,请开启任何来源.OS X 10.12 及以上版本请 ...
- JavaScript DOM–事件操作
事件 注册事件 给元素添加事件,为注册事件或者绑定事件 注册事件两种方式 传统方式 监听事件方式 事件监听 addEventListener() 事件监听 (IE9以上) eventTarget.ad ...