Elasticsearch缓存详解

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch为了提升查询效率,提供了多种查询缓存,本文会对这些种类的缓存进行分析,包括缓存的使用场景、监控缓存的使用情况等。

Elasticsearch为了提升查询效率,提供了多种查询缓存,本文会对这些种类的缓存进行分析,包括缓存的使用场景、监控缓存的使用情况等。

01

Node Query Cache

基于Elasticsearch节点级别的缓存,由节点上所有的分片所共享,主要缓存查询的结果集。节点查询缓存实现了 LRU缓存清除策略,当缓存满了的时候,会清除最近最少使用的数据,为新数据腾出可用空间。

节点查询缓存只缓存使用了Filter过滤器查询到的结果,所以也被称为Filter Cache。

节点查询缓存数量和大小可以通过以下配置进行设置:

node-query-cache-settings.png

另外还可以指定是否缓存某个索引的数据,这通过索引的配置项index.queries.cache.enabled指定,值可以为true和false,默认为true,注意只可以在索引创建或者关闭的时候设置,无法动态设置。

Node Query Cache对于哪些数据哪些场景下会缓存有独立的缓存策略:

  • TermQuery、MatchAllDocsQuery、MatchNoDocsQuery、BooleanQuery、DisjunctionMaxQuery都不会被缓存。
  • MultiTermQuery、MultiTermQueryConstantScoreWrapper、TermInSetQuery、PointQuery 访问2次就会被缓存,其余的场景访问5次才会被缓存。

02

Shard Rquest Cache

基于索引分片级别的缓存。Elasticsearch的请求发到一个协调节点,协调节点通过转发请求到实际的数据节点获取数据,并且将数据进行组装以后返回响应。每一个节点的分片都会将请求本地结果缓存起来,当访问命中时直接从缓存获取,不需要通过读取磁盘的方式,速度会提升很多。

默认情况下,Shard Rquest Cache只缓存查询请求中size=0的请求结果,主要包括aggregations、hits.total和suggestions等。以下情况不会被缓存:

  • 范围查询使用now,由于它是毫秒级别的,缓存下来没有意义
  • 脚本查询中使用了 Math.random() 、Date()等函数的查询
  • scroll查询
  • 设置了 requestCache=false
  • 查询类型不是 QUERY_THEN_FETCH
  • 设置了profile

由于request cache基于分片,当新的segment写入的时候,原缓存的结果已经不是最新的数据,所以缓存会失效。

03

Fielddata Cache

Fielddata  Cache包含了global ordinals和text字段field data的缓存, 主要用于对字段进行排序或聚合 ,它将所有的Field  data聚合后的结果加载到内存中,以提供快速的访问。Fielddata  Cache十分消耗内存,因为一般用于排序或者聚合的数据较大,需要有足够多的内存。

特别说明,从5.0 版本开始,text 字段默认关闭了 Fielddata 功能,当你对一个text类型的字段进行sort、aggregation时会提示以下异常:

text-fielddata.png

如果要对text类型的字段开启fielddata,可以使用以下API:

fielddata-true.png

Fielddata Cache的大小通过配置文件配置参数indices.fielddata.cache.size进行控制,可以是比例例如 10%,也可以是直接指定具体的值,例如2gb。

04

文件系统缓存

Elasticsearch底层是基于Lucene实现的,Lucene底层涉及大量的文件读写,实际上会使用到文件系统缓存,这点是很容易被忽略的,可以通过free命令查看系统buffer/cache使用情况。

05

indexing buffer

elasticsearch索引的过程不会直接写入磁盘,而是先写入一个缓冲区,定时刷新到磁盘或者等缓冲区满了以后刷新到磁盘,这个缓冲区就是 indexing buffer。索引缓冲区的大小通过配置indices.memory.index_buffer_size指定,默认值为10%.

另外还有两个参数用于直接指定最大和最小缓冲区的大小,分别是
indices.memory.min_index_buffer_size

indices.memory.max_index_buffer_size
,其中最小缓冲区默认为48mb。

06

elasticsearch缓存使用情况查询

Node Query Cache(queryCache)、Shard Rquest Cache(requestCache)、Fielddata Cache(fielddata)的使用情况可以通过Cat API进行查询。

cat-nodes-cache.png

cat-node-cache-result.png

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
5月前
|
存储 缓存 监控
Elasticsearch Filter 缓存加速检索的细节,你知道吗?
【8月更文挑战第15天】在大数据与搜索引擎的广阔天地里,Elasticsearch 凭借其强大的全文搜索能力和可扩展性,成为了众多企业和开发者的首选。而在Elasticsearch的性能优化中,Filter缓存(也称为Filter Cache,自Elasticsearch 7.x版本后更名为Query Cache的一部分)扮演着至关重要的角色。今天,我们就来深入探讨一下Elasticsearch Filter缓存如何加速检索过程,以及在日常工作学习中如何有效利用这一特性。
111 0
|
存储 缓存 数据可视化
【Elastic Engineering】Elasticsearch 缓存深度剖析:一次提高一种缓存的查询速度
缓存是加快数据检索速度的王道。因此,如果您有兴趣了解 Elasticsearch 如何利用各种缓存来确保您尽可能快地检索数据,请仔细研读这篇博文,接下来的内容全是干货。本篇博文将阐释 Elasticsearch 的各种缓存功能,这些功能可帮助您在进行初始数据访问后更快地检索数据。Elasticsearch 是使用各种缓存的大户,但在本篇博文中,我们将只着重介绍以下三种:
1276 0
【Elastic Engineering】Elasticsearch 缓存深度剖析:一次提高一种缓存的查询速度
|
缓存 JSON 监控
Elasticsearch缓存
Elasticsearch为了提升查询效率,提供了多种查询缓存,本文会对这些种类的缓存进行分析,包括缓存的使用场景、监控缓存的使用情况等。
356 0
|
缓存 监控 测试技术
Elasticsearch 缓存深入详解
1、Elasticsearch 缓存引出 Elasticsearch 查询的响应需要占用 CPU、内存资源,在复杂业务场景,会出现慢查询,需要花费大量的时间。 如何破局呢?增加集群硬件配置会有高昂硬件开销。还有没有其他方案呢?这时候会想到:缓存。 Elasticsearch 有哪些缓存,不同缓存的应用场景是什么呢?本文给出答案。
1495 0
|
Web App开发 缓存 自然语言处理
Elasticsearch 三种缓存介绍
转自:http://blog.csdn.net/chennanymy/article/details/52504386?locationNum=3 Filter Cache(Query Cache): https://www.elastic.co/guide/en/elasticsearch/reference/1.6/index-modules-cache.html Query Cache也称为Filter Cache,顾名思义它的作用就是对一个查询中包含的过滤器执行结果进行缓存。
1359 0
|
2月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
86 5
|
3月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
350 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
4月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
5月前
|
数据可视化 Docker 容器
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
这篇文章提供了通过Docker安装Elasticsearch和Kibana的详细过程和图解,包括下载镜像、创建和启动容器、处理可能遇到的启动失败情况(如权限不足和配置文件错误)、测试Elasticsearch和Kibana的连接,以及解决空间不足的问题。文章还特别指出了配置文件中空格的重要性以及环境变量中字母大小写的问题。
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】