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的缓存机制,主要是想单独开一章节专门讲 ...
随机推荐
- hadoop3自学入门笔记(1)——虚拟机安装和网络配置
前言 年过30惶惶不安,又逢疫情,还是不断学习,强化自己的能力.hadoop的视频和书籍在15年的时候就看过,但是一直没动手实践过,要知道技术不经过实战,一点提升也没有.因此下定决心边学边做,希望能有 ...
- .Net框架的模块代码生成器--其三(dotnet tool指令的参数)
别人已经写好了一个这种处理指令参数的库,我们这里是使用别人的库来实现规范的指令系统 继续上一篇的gfile或者新建一个.Net Core控制台程序也可以 1.安装nuget包,程序包管理器控制台运行 ...
- vuex的state在组件选项data和computed上引用的区别
引用在vue组件的data选项,不因数值被改变而更新引在在vue组件的computed选项,因数值变化而更组件 案例代码如下,调整下引用vue和vuex地址即可展示 <!DOCTYPE html ...
- 使用Sqlserver 2012 导出表数据为SQL脚本
目录 前言 具体步骤 前言 很多时候,我们需要把数控库中的表的数据导出成SQL脚本的情形.然后,在别的库执行的情况. 以下,总结使用Sqlserver 2012数据库中表数据导出成SQL脚本的步骤. ...
- 将Chrome浏览器中的扩展程序导出为crx插件文件
将Chrome浏览器中安装的插件程序导出为crx插件文件 以360急速浏览器为例进行导出crx插件程序 1.在Chrom商店中找到需要的插件,安装到浏览器的扩展程序里面()IDM Integratio ...
- SQL Server无法连接到服务器 标题: 连接到服务器 ------------------------------ 无法连接到 DESKTOP-J6I1UIC\SQLEXPRESS1。 ------------------------------ 其他信息: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。
解决方案: 打开 SQL server 配置管理器 选择 SQL server 服务,找到服务器,右键启动
- TypeScript(进行中)
https://ts.xcatliu.com 简介 什么是 TypeScript 即使不显式的定义类型,也能够自动做出类型推论 即使第三方库不是用 TypeScript 写的,也可以编写单独的类型文件 ...
- ps调整图片指定区域的颜色,两种方法
参考链接:http://tech.wmzhe.com/article/12329.html
- Vue自定义全局Toast和Loading
如果我们的Vue项目中没有用到任何UI框架的话,为了更好的用户体验,肯定会用到loading和toast.那么我们就自定义这两个组件吧. 1.Toast组件 首先,在common下新建global文件 ...
- P1341 当然是选择AC它了!(字符串处理)
A. 当然是选择AC它了! 题目描述 听闻第八届程序设计大赛马上就要开始了,已经报名的童鞋们都纷纷去 OJ 刷题.但你的女朋友 (tan90°) 想知道她写的 "A + B 问题" ...