众所周知_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,则只能检索不能展示。
分享到:
相关推荐
Elasticsearch的source字段详解,带图说明;总结性的文档。
4.3_document的_source元数据以及定制返回结果解析_source元数据:就是说,我们在创建一个document的时候,使用的那个放在reques
es的浏览器插件。elasticsearch-head是一个用于管理Elasticsearch的web前端插件,搞过ES的同学应该都了解。该插件在es5中可以以独立服务的形式进行安装使用。本文将介绍如何操作。
解压出来就是elasticsearch 3.4.3 部署文件 elasticsearch_linux64_6.4.3.tar.gz
熟悉Elasticsearch的朋友肯定都知道Elasticsearch Head,这是一个elasticsearch的很好用的插件之一,以往elasticsearch5.x之前的版本,对应的Elasticsearch Head的安装相对来说还简单一些,5.x之后安装需要依赖于...
Elasticsearch APIs.postman_collection Elasticsearch 常用接口的 API 地址,导入 postman 后可以定义直接使用,不用自己再去官网对照文档了,已包含绝大多数原生 API 地址。
一个搜索框架的管理界面项目,可以监控管理相关的微服务
Elasticsearch警报守护进程_Go_Shell_下载.zip
112 3.3.8 _source字段 114 3.3.9 _type字段 115 3.3.10 _uid字段 115 3.4 映射参数 116 3.4.1 analyzer参数 116 3.4.2 boost参数 118 3.4.3 coerce参数 119 3.4.4 copy_to参数 120 3.4.5 doc_values参数 121 3.4.6 ...
elasticsearch-7.9.2-x86_64.rpm
elasticsearch7.5集群搭建_kibana
elasticsearch-head
ElasticSearch Head 0.1.5插件,免费使用 ,不用金币免费使用 明明这么好的插件,什么人有脸要金币才能下载,无耻!
经排查,原来是ES默认的缓存设置让缓存区只进不出引起的,具体分析一下。 2. ES缓存区概述 首先简单描述一下ES的缓存机制。ES在查询时,会将索引数据缓存在内存(JVM)中: 驱逐线 和 断路器。当缓存数据到达驱逐...
elasticsearch 简体转换繁体,或者繁体转成简体
ElasticSearch 常用RestFul操作 ,配合https://blog.csdn.net/weixin_38982591/article/details/106026507这一篇博文使用
Laravel Scout 的 Elasticsearch 驱动程序。\n内容\n兼容性\n安装\n配置\n基本用法\n高级搜索\n迁移\n陷阱\n兼容性\n当前版本的 Elastic Scout Driver 已使用以下配置进行了测试:\nPHP 7.4-8.0\n弹性搜索 8.x\...
elasticsearch 2.3.4 IK HEAD这两个插件已经安装。 解压后,直接执行bin下的命令即可
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索...
es浏览器管理插件