filter类型的过滤型的查询结果会被缓存在查询节点缓存中用于加速查询过程。每个节点上都会有一个查询缓存并且被所有的分片共享使用。查询缓存使用的是LRU的逐出策略:当缓存区满了以后,那些最少使用的缓存结果将会被清理逐出,你没有办法区观察缓冲区的结果是什么。 Term类型的查询和非filter类型的查询结果不会被缓存。 默认情况下,缓存能够缓存最大10000个和最大10%的heap空间。Elasticsearch通过跟踪历史事件来决定这次请求是否要缓存。 缓存的最小基本单元是段维度的。只有当段含有10000个以上的文档或者这个段至少包含了3%以上的shard文档数量才会被缓存。因为缓存的最小单元是段,所以段合并会使得缓存失效。(因此,如果你的缓存使用比较频繁的情况下,force merge强制段合并的时候要小心,不要选在高峰期进行) 下面的这些设置是静态配置并且必须在每一个node上进行配置。 indices.queries.cache.size (Static) 控制了缓冲区的大小. 接受一个百分比的值,例如 5%, 或者是一个精确的值, 例如 512mb. 默认值是 10%。
查询缓存的索引配置
下面这些配置是索引级别的配置能配置在每个索引的维度。仅仅在索引创建的时候或者已关闭的索引上进行配置。(所以在运行的索引,你可以先关闭他,再修改配置,然后再打开索引) index.queries.cache.enabled (Static)配置了是否开启查询缓存。 接受 true ( 默认值) 或者是 false。