ulimit -a(查看)
ulimit -n 32000(设置)
修改配置文件调整ES的JVM内存大小。
设置memory_lock来锁定进程的物理内存地址,避免内存交换(swapped) 来提高性能
# 修改文件
vi config/elasticsearch.yml
bootstrap.memory_lock: true
适当增大分片, 可以提升建立索引的能力, 5-20个比较合适。
如果分片数过少或过多, 都会导致检索比较慢。
地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html
地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html
定时对索引进行合并优化, segment越多, 占用的segment memory越多, 查询的性能也越差。
curl -u elastic:123456 -XPOST 'http://master:9200/test/_forcemerge?max_num_segments=1'
针对不使用的index, 建议close, 减少内存占用。
只要索引处于open状态, 索引库中的segement就会占用内存, close之后就只会占用磁盘空间不会占用内存。
curl -u elastic:123456 -XPOST 'master:9200/test/_close'
在Lucene中删除文档, 数据不会马上在硬盘上清除, 而是在lucene索引中产生一个.del的文件, 然而在检索过程中这部分数据也会参与检索, lucene在检索过程会判断是否删除, 如果已经删除, 再过滤掉, 这样也会降低检索效率。
可以执行清除删除文档命令:
curl -u elastic:123456 -XPOST 'http://master:9200/test/_optimize?only_expunge_deletes=true'
如果在项目开始阶段, 需要批量入库大量数据, 建议将副本数设置为0。 因为es在索引数据的时候, 如果副本已经存在, 数据会立即同步到副本中, 这样会对es增加压力。
等到索引完成后, 再恢复副本数即可, 可以提高索引效率。
curl -XGET http://master:9200/test/_settings?pretty
curl -H "Content-Type:application/json" -XPUT 'http://master:9200/test/_settings' -d \
'{
"index":{
"number_of_replicas":0
}
}'
curl -H "Content-Type:application/json" -XPUT 'http://master:9200/test/_settings' -d \
'{
"index":{
"number_of_replicas":1
}
}'
去掉mapping中_all域, Index中默认会有_all的域, 虽然会给查询带来方便, 但是会增加索引时间和索引尺寸。
地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-all-field.html
_source字段我在们进行检索时相当重要。
ES默认检索只会返回ID, 如果在{“enabled”:false}情况下,你需通过根据这个ID去去倒排索引中去取每个Field数据,效率不高。 而反之, 在{“enabled”:true}的情况下可以根据ID直接检索对应source JSON的字段, 不用去倒排索引去按Field取数据。
地址:
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html
使用 Java 代码操作 es 集群,要保证本地 es 的版本和集群上 es 的版本保持一致。
保证集群中每个节点的 JDK 版本和 es 配置一致