Elasticsearch 调优之 搜索速度优化

本章讨论搜索速度优化:搜索速度与系统资源、数据索引方式、查询方式等多方面

1、为文件系统cache预留足够的内存

1)应用程序一般情况下,读写都会被操作系统“cache”

2)cache保存在物理内存中,命中cache可以降低对磁盘的读写频率

3)搜索对系统cache很依赖,如果搜索从磁盘读取数据,则一定会产生相对较高的延迟

4)应该至少为系统cache预留一般的可用内存,更大内存可以有更高的cache命中率

5)线上应禁用swap

2、使用更快的硬件

1)写入对CPU更敏感、而搜索对IO能力需求更大,使用SSD会比旋转类介质好

2)尽量避免使用NFS等远程文件系统。如果NFS比本地系统慢3倍,则搜索场景响应速度会慢10倍

3)如果搜索类型属于计算型,则可以考虑更快的CPU

3、文档模型

1)文档应该合理建模,以降低搜索时的成本

2)避免join操作,嵌套(nested)回使查询慢几倍

3)父子关系可能使查询慢数百倍

4)如果可以通过非规范化文档来回答相同的问题,则可以显著的提高搜索速度

4、预索引数据

可以针对某些查询的模式来优化数据的索引方式

1)

5、字段映射

某些字段是数值类型,但是并不意味着总是应该被映射为数值类型,例如,

一些标识符将它们映射为keyword可能会比integer或long更好。

6、避免使用脚本

应避免使用脚本

如果一定要用,则应该优先考虑painless和expressions

7、优化日期搜索

8、只为读索引执行force-merge

1)为不再更新的只读索引执行force merge,将Lucene索引合并为单个分段,可以提升查询速度

2)如果Lucene索引存在多个分段,每个分段会单独执行搜索再将结果合并,将只读索引

强制合并为一个Lucene分段,不仅可以

原文地址:https://www.cnblogs.com/xibuhaohao/p/11159160.html