Elasticsearch---性能提升建议
Posted 喜欢雨天的我
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch---性能提升建议相关的知识,希望对你有一定的参考价值。
文章目录
服务器层面
服务器层面的优化主要是内存和负载均衡。避免ES由于JVM大于32G而导致不采用内存对象指针压缩技术,导致索引占用空间更大。避免没有做到ES分片没有很好的负载,导致一个节点中 承担了过多的处理导致拖慢整个处理时间。当然还有其他方面的优化
- 采用SSD作为存储设备。
- 使用本地存储,避免使用NFS或者SMB
- 注意使用虚拟存储
- 使用性能更好的CPU,高并发
- 负载均衡
- JVM设定
代码层面
代码层面主要是在开发基于ES的搜索功能时候,要尽量考虑到业务层面和性能的取舍,同时也要考虑到提升搜索的召回率和精准度,以此为基础才能做好搜索业务满足业务和用户的使用目的。在业务面前性能在可接受范围内就算正常。接下来进行梳理一些项目中用到的注意点(不足的欢迎提供建议)
-
避免使用scripts脚本进行处理聚合等操作,除非和业务紧关联。
-
不使用
_all
,因为业务层面已经是对精确的字段进行搜索。 -
用
bulk
进行批量增加或修改 -
分页情况采用
from-to
方式。 当需要返回全量数据时,要采用scroll形式。 -
中文分词 建议采用IK。可以方便的和ES进行配置,并配置层面增加停用词的接口配置。并且分词效果要比官方提供的和其他cn分词库要好很多。
-
分页情况下 比建议使用聚合函数,通配符,模糊搜索和fliter操作。
-
寻找相关词可为了替换much_pharse带来的性能问题的首选。
-
即时搜索(instant search) 或 输入即搜索(search-as-you-type) 采用配置建议,将搜索条件置入一个 有限状态机(finite state transducer) 内来提高及时效果。
-
按受欢迎度提升权重用来进行欢迎度排名
-
过滤集提升权重 适合用作评分 ( 对一个实体中 特定字段进行评分过滤出 最关注的内容 )
表结构层面
- 主分片是为了提高吞吐量(集群情况下),主分片设置的大小要进行结合集群节点数和单节点符合业务容忍度时延共同推导决定。以实际的生产环境为主。
- 副本分片 作为容灾恢复 建议默认即可。
- 增加position_increment_gap:100 避免多查询时候,出现多个值临近情况。
- 更改相似度算法。BM25
- 对于一些业务强相关的分索引,分库 或 同库的情况 要结合场景需求。比如不相关的要进行分索引,相关log按日期分库,企业员工同库。
参考
以上是关于Elasticsearch---性能提升建议的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch:提升 Elasticsearch 性能
Elasticsearch腾讯万亿级 Elasticsearch 内存效率提升解密 源码级别 性能优化
Elasticsearch调优篇 05 - Elasticsearch 搜索层面最全优化
干货 | Elasticsearch Reindex性能提升10倍+实战(转)