Better Search

搜索性能优化

硬件/系统

  • 为系统 cache 预留 至少一半的可用物理内存
    • 搜索依赖对系统的 cache 的命中
  • 禁用 swap
    • swap 分区是从磁盘空间划分而来
  • 更快的硬件
    • 写入性能对 CPU 更敏感
    • 搜索性能更在意 IO 能力
      • 搜索请求有更多的所及访问
      • 使用 SSD 比 旋转介质 还有质的飞跃
      • 如果搜索类型计算比较多,考虑使用更快的 CPU

查看 swap

# 或 free -m
$ swapon -s
Filename    Type           Size    Used Priority
/dev/dm-1        partition 2097144 0    -1

关闭 swap

$ swapoff /dev/dm-1

索引/建模

  • 合理建模
    • 嵌套 会使查询慢 几倍 ???
    • 父子 会使查询慢 百倍 ???
  • 预索引数据
    • 搜索时需要 范围查询 range 的字段,在生成索引时进行计算,生成新的字段,变为 terms 查询
  • 字段映射
    • keywordintegerlong 更好
  • 为只读索引执行 forceMerge、Shrink
    • 基于日期进行轮训的索引,旧数据一般不会更新
  • 预热全局序号(Global Ordinals)???
  • 【6.1+】开启 ARS(自适应副本选择)
    • ES 搜索存在长尾效应,即 一个延迟高的节点 会影响 整个请求的耗时
    • ARS 更根据分片副本的响应情况,只能的把请求路由的性能更高的节点
    • 开启方法?:

搜索技巧

  • 避免使用脚本
  • 有效使用查询缓存
    • 时间力度粗化,如:精确到分钟、固定时间 等,每次查询的时间返回都不一样,会导致缓存利用率降低
    • 细化数据分类: 大部门和缓存的部分 + 少量不可缓存的部分, 如 ( time < 一小时前 OR time >= 最近一小时 )
  • execution hint: map ???
  • 限制搜索的分片数
    • action.search.shard_count ???

聚合技巧

  • batched_reduce_size ???
  • 近似聚合
  • 权衡 深度优先 和 广度优先

Read More