首页 > 产品 > 网站优化 > 正文

牢记这7点,技术小白也能玩转ES

5daofeng2018-11-16 17:36:41阅读次数:5962

Elasticsearch是目前大数据领域最热门的技术栈之一,经过近8年的发展,已从0.0.X版升级至6.X版本,虽然增加了很多的特性和功能,但是在主体架构上,还是没有太多的变化。下面就把我对于ES使用实践的一些经验总结一下,供大家参考。 一、 硬件环境选择 如果有条件,尽可能使用SSD硬盘, 不错的CPU。ES的厉害之处在于ES本身的分布式架构以及lucene的特性;IO的提升,会极大改进ES的速度和性能;内存配置方面,一般...


indices.memory.index_buffer_size:10%(默认)


indices.memory.min_index_buffer_size: 48mb(默认)


indices.memory.max_index_buffer_size


3.修改translog相关的设置:


a. 控制数据从内存到硬盘的操作频率,以减少硬盘IO。可将sync_interval的时间设置大一些。


index.translog.sync_interval:5s(默认)


b. 控制tranlog数据块的大小,达到threshold大小时,才会flush到lucene索引文件。


index.translog.flush_threshold_size:512mb(默认)


4. _id字段的使用,应尽可能避免自定义_id, 以避免针对ID的版本管理;建议使用ES的默认ID生成策略或使用数字类型ID做为主键。


5. _all字段及_source字段的使用,应该注意场景和需要,_all字段包含了所有的索引字段,方便做全文检索,如果无此需求,可以禁用;_source存储了原始的document内容,如果没有获取原始文档数据的需求,可通过设置includes、excludes 属性来定义放入_source的字段。


6.合理的配置使用index属性,analyzed 和not_analyzed,根据业务需求来控制字段是否分词或不分词。只有groupby需求的字段,配置时就设置成not_analyzed, 以提高查询或聚类的效率。


七、 查询优化


1. query_string 或multi_match的查询字段越多, 查询越慢。可以在mapping阶段,利用copy_to属性将多字段的值索引到一个新字段,multi_match时,用新的字段查询。


2.日期字段的查询, 尤其是用now 的查询实际上是不存在缓存的,因此, 可以从业务的角度来考虑是否一定要用now, 毕竟利用query cache 是能够大大提高查询效率的。


3.查询结果集的大小不能随意设置成大得离谱的值, 如query.setSize不能设置成 Integer.MAX_VALUE, 因为ES内部需要建立一个数据结构来放指定大小的结果集数据。


4.尽量避免使用script,万不得已需要使用的话,选择painless & experssions 引擎。一旦使用script查询,一定要注意控制返回,千万不要有死循环(如下错误的例子),因为ES没有脚本运行的超时控制,只要当前的脚本没执行完,该查询会一直阻塞。


5.避免层级过深的聚合查询, 层级过深的group by , 会导致内存、CPU消耗,建议在服务层通过程序来组装业务,也可以通过pipeline的方式来优化。


6.复用预索引数据方式来提高AGG性能:如通过terms aggregations 替代range aggregations, 如要根据年龄来分组,分组目标是: 少年(14岁以下) 青年(14-28) 中年(29-50) 老年(51以上), 可以在索引的时候设置一个age_group字段,预先将数据进行分类。从而不用按age来做range aggregations, 通过age_group字段就可以了。


7. Cache的设置及使用:


a.QueryCache: ES查询的时候,使用filter查询会使用query cache, 如果业务场景中的过滤查询比较多,建议将querycache设置大一些,以提高查询速度。


indices.queries.cache.size: 10%(默认),可设置成百分比,也可设置成具体值,如256mb。


当然也可以禁用查询缓存(默认是开启), 通过index.queries.cache.enabled:false设置。


b.FieldDataCache: 在聚类或排序时,field data cache会使用频繁,因此,设置字段数据缓存的大小,在聚类或排序场景较多的情形下很有必要,可通过

(编辑:5daofeng)
5daofeng
分享到:0