elastic优化

发布时间 2024-01-06 16:37:03作者: 赛博朋克V
  1. 通过定义keyword 的 "null_value" :"NULL",使得搜索是不用单独使用exists查询。统一用terms查询就能查询到想要的结果

  2. 利用constantScore和filter查询,跳过算分的步骤,提高性能

  3. 设置"index" :false 对于不用作为查询条件的字段,增加写的性能

  4. 设置"enable":false,对于不需要检索,排序和聚合的字段

  5. 设置 "norms":false,对于不需要算分的字段

  6. 设置"doc_values" :false 对于不用排序和聚合的字段,增加写的性能

  7. 设置聚合的keyword字段,"eager_global_ordinals": true,能够将写入的文档添加到缓存中,增加聚合搜索的性能

  8. 为索引增加"_meta"信息,用于识别mapping 的版本,便于管理mapping

  9. 查看分片的大小信息,如果每个分片大于20GB,需要扩充主分片数量

  10. 单个节点数据控制在2TB以内,最大不超过5TB

    • 每个节点每GB堆内存,建议最多20个分片,每个分片控制数据在20-40GB内

    • 8GB内存,数据量控制在8*20GB*30G = 4.8TB

    • 根据分片确定节点内存大小:给每个字段预留1kb堆空间

    分片数 * 所有字段数 * 1kb + 0.5GB(开销空间:索引、搜索、聚合)= 最终单节点ES堆空间大小

  11. 对于搜索类的项目,内存和存储数据比例1:16

  12. 有复杂的查询和聚合,建议设置coordinating节点

  13. 为避免分片分布不均的问题,要提前监控磁盘空间,提前清理数据或增加节点(70%)

  14. 使用es自动生成文档的ID,提高refresh interval的时间,默认为1s

  15. 控制分词的级别,使用index_options控制。docs、freqs、positions、offsets