ES是设计成一个搜索引擎的,只擅长返回匹配查询较少文档,如果需要返回非常多的文档需要使用Scroll。
因为ES是基于Lucene来索引和存储数据的,所以对稠密的数据更有效。Lucene能够有效的确定文档是通过一个整数的文档id,无论有没有数据都会话费一个字节存储id。稀疏主要影响norms和doc_values,一些可以避免稀疏的推荐:
使用相同的字段名来保存同样的数据。
并且每个请求不超过几十M,因为太大会导致内存使用过大
多进程或者线程,如果看到TOO_MANY_REQUESTS (429)
和EsRejectedExecutionException
则说明ES跟不上索引的速度,当集群的I/O或者CPU饱和就得到了工作者的数量。
index.refresh_interval
默认是1s,可以改成30s以减少合并压力。
index.refresh_interval to -1 and index.number_of_replicas to 0
缓存是用来缓存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
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。