温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

elasticsearch如何提升速度

发布时间:2026-08-28 02:37:21 来源:亿速云 阅读:104 作者:小樊 栏目:软件技术

提升 Elasticsearch(ES)速度,通常从写入速度和查询速度两个方向入手。下面按场景 + 可落地优化点给你一个系统性的总结。


一、提升查询速度(最常见)

1. 索引设计优化

✅ 合理设置分片数

  • 分片数不是越多越好
  • 单个分片建议大小:10GB~50GB
  • 查询多、写入少 → 分片少一点
  • 写入多 → 分片多一点,但避免过多(增加开销)
分片数 ≈ 数据总量 / 单分片合理大小

✅ 减少索引字段

  • 不需要搜索的字段:index: false
  • 不需要存储的字段:store: false
  • 不需要聚合的字段:不要开启 doc_values
"enabled": false

2. Mapping 优化

✅ 禁用不需要的功能

"type": "keyword",
"doc_values": false,
"index": false

✅ keyword vs text

  • 精确匹配 → keyword
  • 全文搜索 → text
  • 避免对 text 做聚合(慢)

✅ 时间字段用 date

  • 避免使用字符串存时间

3. 查询语句优化(非常重要)

✅ 避免 wildcard / regex

  • wildcard 非常慢
  • 能用 term / terms 就不要用 match

✅ 减少 must 条件

  • 能用 filter 就不用 must
  • filter 不计算评分,可缓存
{
  "query": {
    "bool": {
      "filter": [
        { "term": { "status": 1 } }
      ]
    }
  }
}

✅ 避免深分页

  • from + size 深分页慢
  • 用 search_after 或 scroll

✅ 只返回需要的字段

"_source": ["id", "name"]

4. 使用缓存

✅ 开启查询缓存

  • filter 查询自动缓存
  • 避免频繁变化的条件

✅ 使用 index.sort

  • 对常用排序字段开启
"index": {
  "sort": [
    { "create_time": "desc" }
  ]
}

二、提升写入速度

1. 批量写入

✅ 使用 bulk

  • 单次 bulk:5MB~15MB
  • 文档数:1000~5000 条

✅ 减少 refresh

"refresh_interval": "30s"

2. 减少副本

✅ 写入时临时降低副本

"number_of_replicas": 0

写入完成后再恢复


3. 调整 translog

✅ 异步刷盘

"translog": {
  "durability": "async"
}

三、硬件 & 集群层面

1. 硬件

✅ SSD 是必须的 ✅ 内存

  • ES 建议:
    • 堆内存 ≤ 32GB
    • 剩余内存留给 OS 文件缓存

✅ CPU

  • 查询复杂 → 多核
  • 写入多 → 磁盘 + 网络

2. 集群架构

✅ 专用节点

  • master 节点:只负责集群管理
  • data 节点:负责读写
  • coordinating 节点:负责请求转发

✅ 避免热点分片

  • 分片尽量均匀分布

四、常见慢查询原因速查表

现象 原因 优化
查询慢 深分页 search_after
查询慢 text 聚合 改用 keyword
查询慢 wildcard 禁用或换设计
写入慢 refresh 太频繁 调大 interval
写入慢 副本多 临时降副本
启动慢 分片过多 合并索引

五、推荐优化顺序(实战)

  1. 先优化 查询语句
  2. 再优化 mapping
  3. 再调整 分片 & 副本
  4. 最后考虑 硬件 & 架构

如果你愿意,可以告诉我:

  • ES 版本
  • 数据量 & 分片数
  • 查询 / 写入慢的具体场景

我可以直接帮你给出针对性的优化方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手