如何优化Elasticsearch查询性能

tamoadmin 市场行情 2024-04-07 16 0

针对您的问题,Elasticsearch查询性能的优化可以从以下几个方面进行:

如何优化Elasticsearch查询性能

1.索引层面的优化

增加Refresh时间间隔:Elasticsearch的索引文件是不可变的,要反应数据的变化需要一次刷新操作来重新扫描并加载新的索引文件,所以任意时刻查询的数据都是t时刻(扫描并加载索引文件的时刻)的快照数据,刷新时间的长短决定了数据的近实时(NRT)程度。更新频繁的大索引设置的刷新时间会限制到5s以上(实时程度下降),要提高实时性,必须减小索引大小。

减少副本数量:副本数量的设置也会影响查询性能。默认情况下,Elasticsearch为每个索引创建一个副本,这会消耗更多的存储空间和计算资源,如果副本数量过大,可能会导致查询延迟。

开启异步刷写:异步刷写可以将数据写入到磁盘的过程与处理查询请求的过程分开,从而提高查询性能。

开启慢查询日志:Elasticsearch提供了慢日志,可以帮助我们找出那些查询效率低下的SQL语句,从而进行针对性的优化。

2.服务器层面的优化

内存设置:由于Elasticsearch构建基于Lucene,而Lucene设计强大之处在于Lucene能够很好的利用操作系统内存来缓存索引数据,以提供快速的查询性能。因此,我们很有必要将一半的物理内存留给Lucene;另一半的物理内存留给ES(JVM

heap)。

集群分片设置:Elasticsearch集群在架构拓扑时,一般都会采用HotWarm的架构模式,即设置3种不同类型的节点:Master节点、Hot节点和Warm节点。索引节点(写节点),同时保持近期频繁使用的索引。属于IO和CPU密集型操作,建议使用SSD的磁盘类型,保持良好的写性能;节点的数量设置一般是大于等于3个。

Mapping建模:在创建索引时,我们需要确定哪些字段需要被索引,哪些字段需要被存储。只有被“索引”的字段才能在查询/排序条件中使用,只有被“存储”的字段才能在请求的时候返回字段内容。

索引优化设置:例如,我们可以将业务索引模板mapping添加类似如下配置:properties:{displayname_nor_pt:{type:keyword,fields:{prefix:{index_prefixes:{max_chars:7,min_chars:1),analyzer:keyword_lower,type:text}}}},这样就可以提升查询性能。

3.查询层面的优化

前缀查询优化:前缀查询会导致性能变慢,我们可以将业务索引模板mapping添加类似如下配置:properties:{displayname_nor_pt:{type:keyword,fields:{prefix:{index_prefixes:{max_chars:7,min_chars:1),analyzer:keyword_lower,type:text}}}},这样就可以提升查询性能。

查询截断:如果我们只需要查询结果的一部分,可以使用from和size参数来截断查询结果,避免获取过多的数据。

查询超时毛刺:Elasticsearch中的查询超时时间默认为180ms,如果查询耗时超过这个时间,就会被认为是超时。我们可以通过调整这个超时时间来优化查询性能。

以上就是Elasticsearch查询性能的优化方法,希望对您有所帮助。

追问

延伸阅读

参考资料为您提炼了 4 个关键词,查找到 60231 篇相关资料。

Elasticsearch查询性能优化方法
如何提升Elasticsearch查询速度
Elasticsearch查询性能影响因素
Elasticsearch查询优化技巧