ES是設計成一個搜索引擎的,只擅長返回匹配查詢較少文檔,若是須要返回很是多的文檔須要使用Scroll。html
由於ES是基於Lucene來索引和存儲數據的,因此對稠密的數據更有效。Lucene可以有效的肯定文檔是經過一個整數的文檔id,不管有沒有數據都會話費一個字節存儲id。稀疏主要影響norms和doc_values,一些能夠避免稀疏的推薦:express
使用相同的字段名來保存一樣的數據。緩存
而且每一個請求不超過幾十M,由於太大會致使內存使用過大併發
多進程或者線程,若是看到TOO_MANY_REQUESTS (429)
和EsRejectedExecutionException
則說明ES跟不上索引的速度,當集羣的I/O或者CPU飽和就獲得了工做者的數量。app
index.refresh_interval
默認是1s,能夠改爲30s以減小合併壓力。less
index.refresh_interval to -1 and index.number_of_replicas to 0elasticsearch
禁用swappingide
緩存是用來緩存I/O操做的,至少用通常的內存來運行ES文件緩存。高併發
indices.memory.index_buffer_size
一般是JVM的0.1,確保他足夠處理至多512MB的索引。性能
至少給可用內存的一半到文件系統緩存。
避免連接,嵌套會使查詢慢幾倍,而親自關係能使查詢慢幾百倍,因此若是一樣的問題能夠經過沒有連接的非規範回答就能夠提高速度。
不明覺厲
數值型數據不必定要映射成整形或者長整型
若是實在要使用,就用painless和expressions
https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-forcemerge.html
不要強勢合併正在寫的索引
index.store.preload
,若是內存不是很大會使搜索變得緩慢。
「index」:false
」norms」:false
"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