• 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 减少了网络传输。

  • 相关阅读:
    [git] git 的基本认知
    [Java] Java IO Files
    [Java] Java IO 概况
    [Java] JavaMail 发送带图片的 html 格式的邮件
    [Java] HashMap 导致的高 CPU 使用率
    [Struts] Hello World Demo
    [Hibernate] 注解映射例子
    [Hibernate] List 映射例子
    cmd的xcopy命令
    wpf custom control
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/7405993.html
Copyright © 2020-2023  润新知