ElasticSearch性能优化官方建议

ES 手册

如何提升ES的性能

不要返回较大的结果集

ES是设计成一个搜索引擎的,只擅长返回匹配查询较少文档,若是须要返回很是多的文档须要使用Scroll。html

避免稀疏

由于ES是基于Lucene来索引和存储数据的,因此对稠密的数据更有效。Lucene可以有效的肯定文档是经过一个整数的文档id,不管有没有数据都会话费一个字节存储id。稀疏主要影响norms和doc_values,一些能够避免稀疏的推荐:express

避免将不相关的数据放到相同的索引中

规范的文档结构

使用相同的字段名来保存一样的数据。缓存

避免类型

不用norms和doc_values在稀疏字段

调整索引速度

使用bulk请求

而且每一个请求不超过几十M,由于太大会致使内存使用过大并发

使用 multiple workers/threads发送数据到ES

多进程或者线程,若是看到TOO_MANY_REQUESTS (429)EsRejectedExecutionException则说明ES跟不上索引的速度,当集群的I/O或者CPU饱和就获得了工做者的数量。app

增长刷新间隔

index.refresh_interval默认是1s,能够改为30s以减小合并压力。less

在加载大量数据时候能够暂时不用refresh和repliccas

index.refresh_interval to -1 and index.number_of_replicas to 0elasticsearch

禁用swapping

禁用swappingide

给文件缓存分配内存

缓存是用来缓存I/O操做的,至少用通常的内存来运行ES文件缓存。高并发

使用更快的硬件

  • 使用SSD做为存储设备。
  • 使用本地存储,避免使用NFS或者SMB
  • 注意使用虚拟存储,好比亚马逊的EBS

索引缓冲大小

indices.memory.index_buffer_size一般是JVM的0.1,确保他足够处理至多512MB的索引。性能

调整搜索速度

给文件系统缓存大内存

至少给可用内存的一半到文件系统缓存。

使用更快的硬件

  • 使用SSD做为存储设备。
  • 使用性能更好的CPU,高并发
  • 使用本地存储,避免使用NFS或者SMB
  • 注意使用虚拟存储,好比亚马逊的EBS

文档建模

避免连接,嵌套会使查询慢几倍,而亲自关系能使查询慢几百倍,因此若是一样的问题能够经过没有连接的非规范回答就能够提高速度。

预索引数据

不明觉厉

映射

数值型数据不必定要映射成整形或者长整型

避免scripts

若是实在要使用,就用painless和expressions

强势合并只读索引

https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-forcemerge.html
不要强势合并正在写的索引

准备全局顺序

准备文件系统缓存

index.store.preload,若是内存不是很大会使搜索变得缓慢。

调整磁盘使用

禁用不须要的功能

  • 不须要过滤时能够禁用索引“index”:false
  • 若是你不须要text字段的score,能够禁用”norms”:false
  • 若是不须要短语查询能够不索引positions"indexe_options":"freqs"

不用默认的动态字符串匹配

不要使用_all

使用best_compression

使用最小的足够用的数值类型

byte,short,integer,long
half_float,float,double

https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-create-index.html#mappings
https://www.elastic.co/guide/en/elasticsearch/reference/master/index-modules.html#dynamic-index-settings
https://www.elastic.co/guide/en/elasticsearch/reference/master/search-request-scroll.html

相关文章
相关标签/搜索