ElasticSearch 全文检索_ElasticSearch 优化

举报
Smy1121 发表于 2019/06/22 18:16:16 2019/06/22
【摘要】 ElasticSearch 优化

ElasticSearch 优化(1)-集群脑裂问题


ElasticSearch 优化(2)

调大系统的“最大打开文件数”,建议32K甚至是64K

ulimit -a (查看)

ulimit -n 32000(设置)

image.png


ElasticSearch 优化(3)

修改配置文件调整ES的JVM内存大小

1)修改bin/elasticsearch.in.sh中ES_MIN_MEM和ES_MAX_MEM的大小,建议设置一样大,避免频繁的分配内存。根据服务器内存大小,一般分配60%左右(默认256M)

2)内存最大不要超过32G(详细内容见链接)

image.png


ElasticSearch 优化(4)

设置memory_lock来锁定进程的物理内存地址

避免内存交换(swapped)来提高性能

修改文件

vi config/elasticsearch.yml

bootstrap.mlockall: true(2.4.0以前)

bootstrap.memory_lock: true(2.4.3之后)

image.png


ElasticSearch 优化(5)

适当增大分片,可以提升建立索引的能力,5-20个比较合适。

如果分片数过少或过多,都会导致检索比较慢。


1)分片数过多,会导致检索时打开文件较多,另外也会导致多台服务器之间通讯,影响效率。

2)分片数过少会导至单个分片索引过大,所以检索速度慢。

3)建议单个分片最多存储20G左右的索引数据,通用计算公式:分片数量=数据总量/20G



ElasticSearch 优化(6)

合理设置副本数


1)增加副本,可以提升搜索的能力。

2)如果副本设置过多,会对服务器造成额外的压力,因为主分片需要给所有副本同步数据。另外,副本过多也会占用磁盘空间。

3)一般建议最多设置2-3个即可


ElasticSearch 优化(7)

定时对索引进行合并优化,segment越多,占用的segment memory越多,查询的性能也越差。


1)索引量不大的情况下,可以将segment设置为1。

2)在es2.1.0以前调用_optimize接口,后期改为_forcemerge接口。

curl -XPOST 'http://master:9200/dwq2/_forcemerge?max_num_segments=1'

client.admin().indices().prepareForceMerge("dwq").setMaxNumSegments(1).get();



ElasticSearch 优化(8)

针对不使用的index,建议close,减少内存占用。


只要索引处于open状态,索引库中的segement就会占用内存,close之后就只会占用磁盘空间不会占用内存。

curl -XPOST 'master:9200/dwq/_close'



ElasticSearch 优化(9)

清除删除文档


在Lucene中删除文档,数据不会马上在硬盘上清除,而是在lucene索引中产生一个.del的文件,然而在检索过程中这部分数据也会参与检索,lucene在检索过程会判断是否删除,如果已经删除,再过滤掉,这样也会降低检索效率。

可以执行清除删除文档命令:

curl -XPOST 'http://master:9200/dwq/_optimize?only_expunge_deletes=true'

client.admin().indices().prepareOptimize("dwq").setOnlyExpungeDeletes(true).get();



ElasticSearch 优化(10)

优化ES数据导入:

1)如果在项目开始阶段,需要批量入库大量数据,建议将副本数设置为0。因为es在索引数据的时候,如果副本已经存在,数据会立即同步到副本中,这样会对es增加压力。

2)等到索引完成后,再恢复副本数即可,可以提高索引效率。

curl -XGET http://master:9200/dwq/_settings?pretty

curl -XPUT 'http://master:9200/dwq/_settings' -d

'{"index":{"number_of_replicas":0}}'


curl -XPUT 'http://master:9200/dwq/_settings' -d

'{"index":{"number_of_replicas":1}}'



ElasticSearch 优化(11)

优化ES索引_all

去掉mapping中_all域,Index中默认会有_all的域,虽然会给查询带来方便,但是会增加索引时间和索引尺寸。

image.png



ElasticSearch 优化(12)

优化ES索引_source

_source字段我在们进行检索时相当重要。

ES默认检索只会返回ID,如果在{"enabled":false}情况下,你需通过根据这个ID去去倒排索引中去取每个Field数据,效率不高。

而反之,在{"enabled":true}的情况下可以根据ID直接检索对应source JSON的字段,不用去倒排索引去按Field取数据。

image.png



ElasticSearch 优化(13)

ES优化:

1)使用java代码操作es集群,要保证本地es的版本和集群上es的版本保持一致。

2)保证集群中每个节点的JDK版本和es配置一致。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。