ElasticSearch系列06:ES优化建议

一、ES优化
调大系统的"最大打开文件数",建议32K甚至是64K
  ulimit -a (查看)
  ulimit -n 32000(设置)
修改配置文件调整ES的JVM内存大小
  1:修改bin/elasticsearch.in.sh中ES_MIN_MEM和ES_MAX_MEM的大小,建议设置一样大,避免频繁的分配内存,根据服务器内存大小,一般分配60%左右(默认256M)
  2:如果使用searchwrapper插件启动es的话则修改bin/service/elasticsearch.conf(默认1024M)
设置mlockall来锁定进程的物理内存地址
  避免交换(swapped)来提高性能
  修改文件conf/elasticsearch.yml
  boostrap.mlockall: true
分片多的话,可以提升建立索引的能力,5-20个比较合适。
如果分片数过少或过多,都会导致检索比较慢。分片数过多会导致检索时打开比较多的文件,另外也会导致多台服务器之间通讯。而分片数过少会导至单个分片索引过大,所以检索速度慢。建议单个分片最多存储20G左右的索引数据,所以,分片数量=数据总量/20G
副本多的话,可以提升搜索的能力,但是如果设置很多副本的话也会对服务器造成额外的压力,因为需要同步数据。所以建议设置2-3个即可。
要定时对索引进行优化,不然segment越多,查询的性能就越差
  索引量不是很大的话情况下可以将segment设置为1
  curl -XPOST 'http://localhost:9200/megacorp/_optimize?max_num_segments=1'
  java代码:client.admin().indices().prepareOptimize("megacorp").setMaxNumSegments(1).get();

删除文档:在Lucene中删除文档,数据不会马上在硬盘上除去,而是在lucene索引中产生一个.del的文件,而在检索过程中这部分数据也会参与检索,lucene在检索过程会判断是否删除了,如果删除了在过滤掉。这样也会降低检索效率。所以可以执行清除删除文档
  curl -XPOST 'http://localhost:9200/megacorp/_optimize?only_expunge_deletes=true'
  client.admin().indices().prepareOptimize("megacorp").setOnlyExpungeDeletes(true).get();
如果在项目开始的时候需要批量入库大量数据的话,建议将副本数设置为0
  因为es在索引数据的时候,如果有副本存在,数据也会马上同步到副本中,这样会对es增加压力。待索引完成后将副本按需要改回来。这样可以提高索引效率

去掉mapping中_all域,Index中默认会有_all的域,(相当于solr配置文件中的拷贝字段text),这个会给查询带来方便,但是会增加索引时间和索引尺寸
  "_all":{"enabled":"false"}
log输出的水平默认为trace,即查询超过500ms即为慢查询,就要打印日志,造成cpu和mem,io负载很高。把log输出水平改为info,可以减轻服务器的压力。
  修改ES_HOME/conf/logging.yaml文件
  或者修改ES_HOME/conf/elasticsearch.yaml

二、es需要注意的问题
1、在使用java代码操作es集群的时候要保证本地使用的es的版本和集群上es的版本保持一致。
2、保证集群中每个节点的JDK版本和es配置一致

三、es源码分析-shard分片规则
elasticsearch在建立索引时,根据id或id,类型进行hash,得到hash值与该索引的文档数量取余,取余的值即为存入的分片。
具体源码为:根据PlainOperationRouting类的shardId方法进行分片

四、es+hbase
jetty 安装
http://eclipse-jetty.github.io/installation.html
项目中索引库的设计
curl -XPUT 'localhost:9200/megacorp/' -d'{"settings":{"number_of_shards":5,"number_of_replicas":0}}'
curl -XPOST 'localhost:9200/megacorp' -d @megacorp.json
测试索引库中某个字段的分词效果
curl  -XGET 'http://localhost:9200/megacorp/_analyze?pretty&field=article.title' -d '超人学院'

五、mapping中可以设置的类型
字符串string
数字(byte,short,integer,long,float,double)
日期date
  日期的话可以设置格式
  {"type":"date","store":"yes","format":"YYYY-mm-dd"}
布尔型boolean
二进制binary

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值