原文网址:ElasticSearch--优化写入速度的方法--单个索引的操作_IT利刃出鞘的博客-CSDN博客
说明
本文介绍如何在单个索引的层面优化写入的方法。
相关网址
ElasticSearch--优化写入速度的方法--修改配置_IT利刃出鞘的博客-CSDN博客
粉丝福利:有很多粉丝私信问我有没有Java的面试及PDF书籍等资料,我整理一下,包含:真实面试题汇总、简历模板、PDF书籍、PPT模板等。这些是我自己也在用的资料,面试题是面试官问到我的问题的整理,其他资料也是我自用的,真正实用、靠谱。资料可以从这里免费获取:资料地址
通过ES写入流程可以看出,写入doc时如果外部指定了id,则ES会先尝试读取原来doc的版本号,以判断是否需要更新。这会涉及一次读取磁盘的操作,通过自动生成doc ID可以避免这个环节。
_source字段用于存储doc原始数据,对于部分不需要存储的字段,可以通过includes excludes过滤,或者将_source禁用,一般用于索引和数据分离。
这样可以降低I/O的压力,不过实际场景中大多不会禁用_source,而即使过滤某些字段,对于写入速度的提升作用也不大,满负荷写入情况下,基本是CPU先跑满了,瓶颈在于CPU。
从ES 6.0开始,_all字段默认认为不启用,而在此前的版本中,_all字段默认是开启的。_all字段中包含所有字段分词后的关键词,作用是可以在搜索的时候不指定特定字段,从所有字段中检索。
Norms用于在搜索时计算doc的评分,如果不需要评分,则可以将其禁用:
"title " : { "type" : "string" , "norms" : { "enabled" : false}}
index_options用于控制在建立倒排索引过程中,哪些内容会被添加到倒排索引,例如,doc数量、词频、positions、offsets等信息,优化这些设置可以一定程度降低索引过程中的运算任务,节省CPU占用率。
不过在实际场景中,通常很难确定业务将来会不会用到这些信息,除非一开始方案就明确是这样设计的。