Elasticsearch---性能提升建议

版权声明:商业用途请联系博主,非商业转载请标明出处。 https://blog.csdn.net/qq_15807167/article/details/83413388

服务器层面

服务器层面的优化主要是内存和负载均衡。避免ES由于JVM大于32G而导致不采用内存对象指针压缩技术,导致索引占用空间更大。避免没有做到ES分片没有很好的负载,导致一个节点中 承担了过多的处理导致拖慢整个处理时间。当然还有其他方面的优化

  • 采用SSD作为存储设备。
  • 使用本地存储,避免使用NFS或者SMB
  • 注意使用虚拟存储
  • 使用性能更好的CPU,高并发
  • 负载均衡
  • JVM设定

代码层面

代码层面主要是在开发基于ES的搜索功能时候,要尽量考虑到业务层面和性能的取舍,同时也要考虑到提升搜索的召回率和精准度,以此为基础才能做好搜索业务满足业务和用户的使用目的。在业务面前性能在可接受范围内就算正常。接下来进行梳理一些项目中用到的注意点(不足的欢迎提供建议

  • 避免使用scripts脚本进行处理聚合等操作,除非和业务紧关联。

  • 不使用_all,因为业务层面已经是对精确的字段进行搜索。

  • bulk进行批量增加或修改

  • 分页情况采用from-to方式。 当需要返回全量数据时,要采用scroll形式。

  • 中文分词 建议采用IK。可以方便的和ES进行配置,并配置层面增加停用词的接口配置。并且分词效果要比官方提供的和其他cn分词库要好很多。

  • 分页情况下 比建议使用聚合函数,通配符,模糊搜索和fliter操作。

  • 采用window_size 对感兴趣的Top进行重打分

  • 寻找相关词可为了替换much_pharse带来的性能问题的首选。

  • 即时搜索(instant search) 或 输入即搜索(search-as-you-type) 采用配置建议,将搜索条件置入一个 有限状态机(finite state transducer) 内来提高及时效果。

  • 按受欢迎度提升权重用来进行欢迎度排名

  • 过滤集提升权重 适合用作评分 ( 对一个实体中 特定字段进行评分过滤出 最关注的内容 )

  • 越近越好选择感兴趣范围进行打分, 当内置函数不能满足场景需求时,进行使用脚本打分

表结构层面

  • 主分片是为了提高吞吐量(集群情况下),主分片设置的大小要进行结合集群节点数和单节点符合业务容忍度时延共同推导决定。以实际的生产环境为主。
  • 副本分片 作为容灾恢复 建议默认即可。
  • 增加position_increment_gap:100 避免多查询时候,出现多个值临近情况。
  • 更改相似度算法。BM25
  • 对于一些业务强相关的分索引,分库 或 同库的情况 要结合场景需求。比如不相关的要进行分索引,相关log按日期分库,企业员工同库。

参考

猜你喜欢

转载自blog.csdn.net/qq_15807167/article/details/83413388