elasticsearch中mapping的_source和store的笔记

0、故事引入

无心中看到了ES的mapping中有store字段,做为一个ES菜鸡,有必要对这个字段进行下笔记。html

一、_source

_source字段我在们进行检索时至关重要,app

ES默认检索只会返回ID,若是在{"enabled":false}状况下,你需经过根据这个ID去去倒排索引中去取每一个Field数据,效率不高。elasticsearch

而反之,在{"enabled":true}的状况下能够根据ID直接检索对应source JSON的字段,不用去倒排索引去按Field取数据。学习

 

尽管_source很是有用, 但它确实会占用索引的存储空间, 因此也能够禁用(enabled false)、启用状态的压缩策略(compress)。spa

压缩的策略有两类:.net

  • compress:是否进行压缩,建议通常状况下将其设为true 
  • "includes" : ["author", "name"], "excludes" : ["sex"] 

二、store

默认为no,code

若是在{"store":yes}的状况下,ES会对该字段单独存储倒排索引,每次根据ID检索的时候,会多走一次IO来从倒排索引取数据。htm

而若是_source enabled 状况下,ES能够直接根据Client类来解析_source JSON,只需一次IO就将全部字段都检索出来了。blog

 

{"store":yes}既然这么费力不讨好,可是仍然有两个应用场景:索引

  • 文档很长,检索全部文档或者存储全部文档、获取全部field的代价比较大
  • 仅仅针对某几个字段进行re-index的时候

三、总结

_source\store  yes no
enabled

store为yes的字段从倒排索引里检索,

浪费IO次数

全部字段根据Client类解析实现存储的JSON串

仅需一次IO

disabled

store为yes的字段从倒排索引里检索,

其余字段能检索不能展现  

全部字段只能检索,不能展现

PS. 索引后-->可查询检索,存储后-->可展现

99九、参考

ElasticSearch学习

elasticsearch文档-字段的mapping

elasticsearch的store属性跟_source字段

相关文章
相关标签/搜索