ElasticSearch优化的一些方法

1.多线程程序插入,可以根据服务器情况开启多个线程index

速度可以提高n倍,n>=2

2.如果有多台机器,可以以每台设置n个shards的方式,根据业务情况,可以考虑取消replias

curl-XPUT'http://10.1.*.*:9200/dw-search/'-d'{

"settings":{

"number_of_shards":20,

"number_of_replicas":0

}

}'

这里设置20个shards,复制为0,如果需要replicas,可以完成index后再修改为replicas>=1

原文:http://www.elasticsearch.org/guide/reference/api/admin-indices-create-index.html

3.提高ES占用内存

内存适当调大,初始是256M,最大1G,

调大后,最小和最大一样,避免GC,并根据机器情况,设置内存大小,

$bin/elasticsearch-f-Xmx4g-Xms4g-Des.index.storage.type=memory

原文:http://www.elasticsearch.org/guide/reference/setup/installation.html

4.减少shard刷新间隔

curl-XPUT'http://10.1.*.*:9200/dw-search/_settings'-d'{

"index":{

"refresh_interval":"-1"

}

}'

完成bulk插入后再修改为初始值

curl-XPUT'http://10.1.*.*:9200/dw-search/_settings'-d'{

"index":{

"refresh_interval":"1s"

}

}'

5.设置一个shard的段segment最大数

可以减少段文件数,提高查询速度

curl-XPOST'http://10.1.*.*:9200/dw-search/_optimize?max_num_segments=5'

注意:有时候可能需要多次执行

原文:http://www.elasticsearch.org/guide/reference/api/admin-indices-update-settings.html

原文:http://www.elasticsearch.org/guide/reference/index-modules/merge.html

6.去掉mapping中_all域

Index中默认会有_all的域,这个会给查询带来方便,但是会增加索引时间和索引尺寸

"_all":{"enabled":false}

原文:http://www.elasticsearch.org/guide/reference/mapping/all-field.html

curl-XPOST'http://10.1.*.*:9200/dw-search/pt_normal/_mapping'--data-binary@pt_normal_properties.mapping

7.设置source为压缩模式或者disable

compress=true这个能大大减少index的尺寸

disable将直接没有_source域

8.增加merge.policy.merge_factor数

设置merge.policy.merge_factor到30,初始是10

增加这个数需要更多的内存,bulkindex可以调大这个值.

如果是即时索引,应该调小这个值

原文:http://www.elasticsearch.org/guide/reference/index-modules/merge.html

9.修改Client获得方式为

Nodenode=nodeBuilder().client(true).node();

Clientclient=node.client()

相比transportclient更快

测试效果,速度提高不明朗,且报错。去除

相关推荐