关于es的缓存

本人在使用es查询的时候第一次用时46ms,连续第二次仅用了4ms,不由得想起了缓存,经查询资料得知:

es有三种缓存:分别是query,fielddata和request

      1、query cache

          也称filter cache,作用是对一个查询中包含的过滤器执行结果进行缓存,满足了term, range过滤器的clause会被缓存(5.1.1版本term被取消了),bool不会被缓存,但是bool过滤器包含的子term会被缓存。

       2、request cache

           当一个查询发送到es cluster的某个节点上时,这个节点会把该查询扩散分发到其余节点,并在相应分片上执行,将分片上执行的结果成为“本地结果集”。这些本地结果集最终会汇集到最初请求到达的那个协调节点,这些“分片级”的“本地结果集”会合并成“全局结果集“。query-and-fetch里面的query过程。request cache就是缓存这些”分片级本地结果集“的。但是request cache在每次refresh_interval后就会被清空,所以其生命周期是一个refresh_interval(默认是1秒)。

      3、 fielddata cache 

        field data与doc_values作用一样,都是让我们在inverted index倒排索引的基础上做aggregation统计、sort排序。
当第一次在analyzed字段(只有analyzed字段使用fielddata,其余使用doc_values)上进行agg、sort或通过脚本访问时,就会触发该字段fielddata cache的加载,这种缓存的“segment”级别的,但有新的segment打开时,旧的缓存不会重新加载,而是直接把新的segment对应的fielddata cache加载到内存。一个fielddata被加载,那么在fielddata cache对应的segment生命周期范围内都会驻留在内存中。也即,当段合并时会触发合并后更大段的fielddata cache加载。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值