集群配置
1、调整副本数:考虑数据的可用性和读取性能,合理配置分片的副本数。
2、合理配置分片大小(分片的合理容量:10GB-50GB):避免分片过大,以确保更好的性能和均衡的负载。
3、监控集群状态:使用监控工具监测集群状态,检查节点健康和性能指标。
4、使用冷热分离:将冷热数据分离:对于不经常访问的数据,可以将其放在较慢、但成本较低的存储上。
性能调优
1、调整 JVM 堆大小:根据硬件配置和数据量,适当调整 Elasticsearch 进程的 JVM 堆大小
2、增加 flush 时间间隔: 减小数据写入磁盘的频率,减小磁盘IO频率
3、使用 SSD 存储:在可能的情况下,使用 SSD 存储可以提高磁盘 I/O 性能
4、优化文件系统:确保文件系统支持 mmap,并且文件描述符的限制足够高。
查询优化
1、使用批量操作:将多个操作组合成批量请求,减少网络开销
2、合理使用缓存:利用 Elasticsearch 的缓存功能,例如字段数据缓存、过滤器缓存等。
3、避免单次召回大量数据
搜索引擎最擅长的事情是从海量数据中查询少量相关文档,而非单次检索大量文档。非常不建议动辄查询上万数据。如果有这样的需求,建议使用滚动查询
4、避免单个文档过大
鉴于默认http.max_content_length设置为 100MB,Elasticsearch 将拒绝索引任何大于该值的文档。您可能决定增加该特定设置,但 Lucene 仍然有大约 2GB 的限制
合理设计索引
1、分片和副本设置:确保设置合理的分片和副本数,考虑数据量、节点数和集群大小
2、使用合适的数据类型:选择适当的字段数据类型,减少索引大小和提高搜索性能。
映射优化
1、禁用不必要的 _source 字段:如果不需要检索文档原始内容,可以禁用 _source 字段以减小索引大小。
2、使用 keyword 类型:对于不需要分词的字段,使用 keyword 类型而不是 text 类型。