Es可以用廉价的硬件资源和毫秒级的速度搜索数亿的文档,其中优秀的缓存机制起了一定的作用。
三个缓存点:1. 过滤器缓存
2. 分片的查询缓存,运行聚合操作在静态索引
3. 操作系统缓存,保证I/O高性能传输
设置查询预处理:index warmers
Filters and filter caches
通过_cache字段控制过滤器缓存:true/false
小贴士:不是所有的过滤器会用_cache控制缓存
过滤器的缓存会被所有的节点共享:当前集群的设置是30%,超过的会采用least recently used (LRU)淘汰。
但是会遇到这样的性能瓶颈,一个查询被缓存了,但是查询一次之后就没有被使用了,而缓存会一直存在直到到达30%的限制之后,就会被释放,这样好吗?肯定是不好的,当查询缓存被使用完了,每一个搜索都会消耗cpu的资源来使旧的缓存被释放从而存放新的缓存条目。
所以为了使得ElasticSearch变得聪明一些,我们设置了缓存失效时间,根据实际需要设置,例如:30分钟。
他们紧凑和易于创建,所以创建缓存的开销过滤器是首次运行时微不足道
重复利用
Bitset之间可以很容易的进行组合,ElasticSearch也可以很容易的得到bitset组合的结果。
过滤器缓存形式有三种:bitset,cache the overall results,field data
Field data 在排序和聚合的时候会使用,term 和range过滤器查询也会使用到。