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

相關文章
相關標籤/搜索