ElasticSearch 全文检索_ElasticSearch 优化

网友投稿 751 2022-05-28

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

ElasticSearch 优化(2)

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

ulimit -a (查看)

ulimit -n 32000(设置)

ElasticSearch 优化(3)

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

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

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

ElasticSearch 优化(4)

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

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

修改文件

vi config/elasticsearch.yml

bootstrap.mlockall: true(2.4.0以前)

bootstrap.memory_lock: true(2.4.3之后)

ElasticSearch 全文检索_ElasticSearch 优化

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的域,虽然会给查询带来方便,但是会增加索引时间和索引尺寸。

ElasticSearch 优化(12)

优化ES索引_source

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

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

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

ElasticSearch 优化(13)

ES优化:

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

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

全文检索 Elasticsearch 实时流计算服务 CS

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【云小课】EI第21课 MRS基础入门之HDFS组件介绍
下一篇:操作系统的内核
相关文章