如何优化Elasticsearch的搜索性能?
优化 Elasticsearch 的搜索性能需要从索引设计、查询优化、硬件配置和集群调优等多方面入手。以下是系统化的优化策略和实操建议:
一、索引设计优化
1. 合理设置分片数
- 分片大小:单个分片建议 10-50GB(超过50GB会影响查询性能)。
- 分片数量:
- 总分片数 ≤ 节点数 × 1000(避免分片过多导致元数据膨胀)。
- 示例:3节点集群,索引1TB数据 → 分20个主分片(每个约50GB)。
- 注意:主分片数一旦创建不可更改,需提前规划。
2. 冷热数据分离
- 热节点(Hot):SSD磁盘,处理高频查询的最新数据。
- 冷节点(Warm):HDD磁盘,存储历史数据。
- 实现方式:
PUT /logs-2023 {"settings": {"index.routing.allocation.require.box_type": "hot"} }
3. 索引生命周期管理(ILM)
- 自动滚动(Rollover)索引,避免单个索引过大。
- 配置策略:
PUT _ilm/policy/hot_warm_policy {"phases": {"hot": { "actions": { "rollover": { "max_size": "50GB" } } },"warm": { "actions": { "allocate": { "require": { "box_type": "warm" } } } }} }
4. 优化映射(Mapping)
- 字段类型:使用最精确的字段类型(如 keyword 而非 text 用于精确匹配)。
- 禁用不需要的功能:
{"properties": {"id"