提升 Elasticsearch(ES)速度,通常从写入速度和查询速度两个方向入手。下面按场景 + 可落地优化点给你一个系统性的总结。
✅ 合理设置分片数
分片数 ≈ 数据总量 / 单分片合理大小
✅ 减少索引字段
index: falsestore: falsedoc_values"enabled": false
✅ 禁用不需要的功能
"type": "keyword",
"doc_values": false,
"index": false
✅ keyword vs text
keywordtexttext 做聚合(慢)✅ 时间字段用 date
✅ 避免 wildcard / regex
wildcard 非常慢term / terms 就不要用 match✅ 减少 must 条件
filter 就不用 mustfilter 不计算评分,可缓存{
"query": {
"bool": {
"filter": [
{ "term": { "status": 1 } }
]
}
}
}
✅ 避免深分页
from + size 深分页慢search_after 或 scroll✅ 只返回需要的字段
"_source": ["id", "name"]
✅ 开启查询缓存
✅ 使用 index.sort
"index": {
"sort": [
{ "create_time": "desc" }
]
}
✅ 使用 bulk
✅ 减少 refresh
"refresh_interval": "30s"
✅ 写入时临时降低副本
"number_of_replicas": 0
写入完成后再恢复
✅ 异步刷盘
"translog": {
"durability": "async"
}
✅ SSD 是必须的 ✅ 内存
✅ CPU
✅ 专用节点
✅ 避免热点分片
| 现象 | 原因 | 优化 |
|---|---|---|
| 查询慢 | 深分页 | search_after |
| 查询慢 | text 聚合 | 改用 keyword |
| 查询慢 | wildcard | 禁用或换设计 |
| 写入慢 | refresh 太频繁 | 调大 interval |
| 写入慢 | 副本多 | 临时降副本 |
| 启动慢 | 分片过多 | 合并索引 |
如果你愿意,可以告诉我:
我可以直接帮你给出针对性的优化方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。