zoukankan      html  css  js  c++  java
  • 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 减少了网络传输。

  • 相关阅读:
    Visual C#核心编程之泛型
    Visual C#核心编程之枚举器
    标准的非托管资源的销毁模式
    Visual C#核心编程之LINQ
    Visual C#核心编程之数组和集合
    ACCPSQL第四章上机六
    Visual C#2008核心编程之类型
    一月一代码 3月 kmp 领悟代码
    [转] 技巧 如何统一设置 windows live writer 的 图片大小
    understanding the linux virtual memory management 图序
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/7405993.html
Copyright © 2011-2022 走看看