是时候用 ES 拯救发际线啦

哪种类型的数据会占用大量terms_memory,有何优化方案?

Elasticsearch | 作者 Loading Zhang | 发布于2018年07月05日 | 阅读数:3168

集群中有一个索引每天产生2+TB的数据,大约占用掉10G的内存,其中terms_memory占了9G+。mapping中所有string类型的字段使用keyword类型,有一个msg字段较长,将该字段的index设为false之后,内存降到6G+但仍然较高。
我认为的terms_memory是使用倒排索引占用的内存,倒排是在分词之后产生的,keyword类型的不需要分词为什么也会占用terms_memory?是不是因为keyword字段中,整个字段中的内容就是一个term?
在关闭index之后还剩下6G+的terms_memory是哪些功能占用的?
已邀请:

kennywu76 - Wood

赞同来自: cccthought

keyword类型的字段,每一个字段的内容就是一个term,同样需要消耗terms_memory。 对于较长的msg字段,几乎每条文档的内容都不同,那么该字段的term就非常多,词典非常大,响应的term memory消耗就会非常高。 这类字段应该设置为text,经过分词以后产生的term数量可能不会很多,会省掉很多的term memory。或者完全不需要搜索的情况下,可以像你做的那样,不索引该字段。
 
你在关闭msg的index之后,看到的6G+ terms memory,是其他keyword字段的消耗。
 
 

rockybean - Elastic Certified Engineer, ElasticStack Fans,公众号:ElasticTalk

赞同来自:

keyword 不是不分词,是把整个内容作为一个 term 处理,index 设为 false 是不分词,也就意味着不能针对该字段作搜索。
 
如果仅过滤和聚合分析还可以把 norms 设为 false,如果不做聚合分析和排序,那么嗨可以把 doc_value 设为 false
 
 
还有一个设置是 enabled 设置为 false 的话,就只做存储,其他啥都做不了了
 

zqc0512 - andy zhou

赞同来自:

doc_value 设为 false 不需要索引查询的,可以这样修改,内存一下就下来了。

要回复问题请先登录注册