众所周知_source字段存储的是索引的原始内容,那store属性的设置是为何呢?es为什么要把store的默认取值设置为no?设置为yes是否是重复的存储呢?

我们将一个field的值写入es中,要么是想在这个field上执行search操作(不知道具体的id),要么执行retrieve操作(根据id来检索)。但是,如果不显式的将该field的store属性设置为yes,同时_source字段enabled的情况下,你仍然可以获取到这个field的值。这就意味着在一些情况下让一个field不被index或者store仍然是有意义的。

当你将一个field的store属性设置为true,这个会在lucene层面处理。lucene是倒排索引,可以执行快速的全文检索,返回符合检索条件的文档id列表。在全文索引之外,lucene也提供了存储字段的值的特性,以支持提供id的查询(根据id得到原始信息)。通常我们在lucene层面存储的field的值是跟随search请求一起返回的(id+field的值)。es并不需要存储你想返回的每一个field的值,因为默认情况下每一个文档的的完整信息都已经存储了,因此可以跟随查询结构返回你想要的所有field值。

有一些情况下,显式的存储某些field的值是必须的:当_source被disabled的时候,或者你并不想从source中parser来得到field的值(即使这个过程是自动的)。请记住:从每一个stored field中获取值都需要一次磁盘io,如果想获取多个field的值,就需要多次磁盘io,但是,如果从_source中获取多个field的值,则只需要一次磁盘io,因为_source只是一个字段而已。所以在大多数情况下,从_source中获取是快速而高效的。

es中默认的设置_source是enable的,存储整个文档的值。这意味着在执行search操作的时候可以返回整个文档的信息。如果不想返回这个文档的完整信息,也可以指定要求返回的field,es会自动从_source中抽取出指定field的值返回(比如说highlighting的需求)。

你可以指定一些字段store为true,这意味着这个field的数据将会被单独存储。这时候,如果你要求返回field1(store:yes),es会分辨出field1已经被存储了,因此不会从_source中加载,而是从field1的存储块中加载。
哪些情形下需要显式的指定store属性呢?大多数情况并不是必须的。从_source中获取值是快速而且高效的。如果你的文档长度很长,存储_source或者从_source中获取field的代价很大,你可以显式的将某些field的store属性设置为yes。缺点如上边所说:假设你存储了10个field,而如果想获取这10个field的值,则需要多次的io,如果从_source中获取则只需要一次,而且_source是被压缩过的。
还有一种情形:reindex from some field,对某些字段重建索引的时候。从source中读取数据然后reindex,和从某些field中读取数据相比,显然后者代价更低一些。这些字段store设置为yes比较合适。
总结:
如果对某个field做了索引,则可以查询。如果store:yes,则可以展示该field的值。
但是如果你存储了这个doc的数据(_source enable),即使store为no,仍然可以得到field的值(client去解析)。
所以一个store设置为no 的field,如果_source被disable,则只能检索不能展示。

es store详解相关推荐

  1. ElasticSearch——Spring Boot 集成 ES 操作详解

    文章目录 ElasticSearch--Spring Boot 集成 ES 操作详解 1.SpringBoot 集成 ES 2.索引的API操作详解 3.文档的API操作详解 ElasticSearc ...

  2. ROCKOUT软件测试工程师,具透丨这才是让 iMessage 变得好玩有用的原因:iMessage App Store 详解...

    关于栏目 苹果.谷歌每年一次大更新的新系统都值得关注,我们始终不建议普通用户提前尝鲜稳定性不佳的测试版,但我们理解想要尝鲜的心情,于是有了「具透」这个栏目.「具透」会挖掘.详解新系统的各个功能细节,并 ...

  3. Elastic stack技术栈学习(十)— springboot集成ES API详解

    目录 一.关于索引的API详解 1.1 声明客户端 1.2 创建索引 1.3 获取文档 / 判断文档是否存在 ​1.4 删除索引 二.关于文档的API详解 2.1 添加文档 2.2 判断文档是否存在 ...

  4. iOS上架App Store详解(图文)

    上架基本需求资料 1.苹果开发者账号(如还没账号先申请- 苹果开发者账号申请教程) 2.开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.appl ...

  5. OpenGL ES入门详解

    http://blog.csdn.net/wangyuchun_799/article/details/7736928 版权声明:本文为博主原创文章,未经博主允许不得转载.  1.决定你要支持的Ope ...

  6. 【Es】es 配置文件详解

    1 概述 2.elasticsearch.yml ##################### Elasticsearch Configuration Example ################# ...

  7. 【ELK】7. elasticsearch linux上操作es命令详解

    ========== 1.检查ES节点是否正常启动 curl http://192.168.6.16:9200 正常状态: 非正常状态: 1>确保服务是不是正常启动了,端口用的是哪个 2> ...

  8. 【EslaticSearch】ES 搜索引擎详解

    ES 搜索引擎 查询文档 基本语法 全文检索 match multi_match 精准查询 term range 地理查询 geo_bounding_box 矩形范围 获取坐标请点击这里! geo_d ...

  9. bulk插入 es_ElasticSearch的Bulk操作 ES bulk详解

    elasticsearch bulkApi是什么?和普通的CURD区别在哪里? 1.可以批量对多个索引进行增加或者删除等操作,减少网络请求次数,可以显著的提高索引的速度. 2.CURD只能对单条数据进 ...

最新文章

  1. 动手学深度学习(二)
  2. 机器学习和计算机视觉的20大图像数据集
  3. 公布自己的pods到CocoaPods trunk 及问题记录
  4. c语言 交互式电子白板案例,交互式电子白板教学案例
  5. 分段处理_连续油管无限级可开关固井滑套分段压裂工艺
  6. 利用JasperReport+iReport进行Web报表开发
  7. windows 快捷键整理
  8. (DFS+DP)滑雪(poj1088)
  9. 常用PHP数组函数总结
  10. PHP中mysql如何添加记录_PHP向MySql提交数据添加记录的简单代码_PHP教程
  11. .NET开发人员十大必备下载工具
  12. 注解形式控制器配置(3)
  13. Lua开发工作笔记0003---Windows下搭建Lua开发环境
  14. 杭电4520小Q系列故事——最佳裁判
  15. 苹果电脑如何修改环境变量
  16. tomcat修改http长度限制_解决浏览器与服务器请求url长度限制
  17. php阿拉伯数字转换大写,php 阿拉伯数字如何转大写
  18. FPS透视自瞄辅助-游戏漏洞及原理
  19. 怎样在Mac上为 Apple ID 设置双重认证?
  20. hadoop文件存储位置_hadoop – HDFS存储数据的位置

热门文章

  1. Vue实现兄弟组件间的方法调用及回调
  2. Origin技巧,带误差棒点线图的绘制
  3. ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十四节--后台工作者HangFire与ABP框架Abp.Hangfire及扩展...
  4. android解锁动画效果,Android开发学习——Day24(火焰燃烧和蒙眼解锁界面动画:关键帧动画和补间动画)...
  5. L1-6 吃火锅 (15分)
  6. 呕心沥血一个月,为小白新手准备的C/C++ Linux求职版学习路线
  7. 遭遇Cli5.exe,DNFchin.exe,362.VBS,svhot.exe,userdata.dll,oshajf.sys等
  8. vr全景说:企业如何利用vr全景营销引流精准客户
  9. 公务员备考(十一) 行测 数量关系
  10. cacti数据库修复命令