众所周知_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,则只能检索不能展示。
分享到:
相关推荐
为了更好地理解_source字段与store字段之间的关系,我们通过具体的实例来进行说明。 ##### 实例1: 假设我们有一个索引,其中关闭了_source字段,并且包含2个字段store为true,1个字段store为false。 1. **输入...
4.3_document的_source元数据以及定制返回结果解析_source元数据:就是说,我们在创建一个document的时候,使用的那个放在reques
**Elasticsearch(ES)详解** Elasticsearch是一款开源、分布式、实时的全文搜索引擎,它基于Lucene构建,被广泛用于大数据分析、日志聚合、实时搜索和索引等场景。其强大的功能和易用性使得它在IT行业中备受青睐。...
熟悉Elasticsearch的朋友肯定都知道Elasticsearch Head,这是一个elasticsearch的很好用的插件之一,以往elasticsearch5.x之前的版本,对应的Elasticsearch Head的安装相对来说还简单一些,5.x之后安装需要依赖于...
es的浏览器插件。elasticsearch-head是一个用于管理Elasticsearch的web前端插件,搞过ES的同学应该都了解。该插件在es5中可以以独立服务的形式进行安装使用。本文将介绍如何操作。
4. **标签“es-head”**:这个标签表明这个压缩包可能包含的是Elasticsearch Head的源代码或者特定版本的打包文件。用户可以解压后部署在自己的环境中,自定义配置或进行二次开发。 5. **文件名称列表**:"Elastic...
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 APIs.postman_collection Elasticsearch 常用接口的 API 地址,导入 postman 后可以定义直接使用,不用自己再去官网对照文档了,已包含绝大多数原生 API 地址。
ElasticSearch Head是一款非常实用的Elasticsearch管理工具,它以浏览器插件的形式存在,方便用户直观地查看、管理和操作Elasticsearch集群。版本0.1.5是这个插件的一个历史版本,提供了免费的使用体验,无需支付...
dml搜球网基于Elasticsearch的存储服务_es-client
其中,`stream_type`字段用于标识每个ES的数据类型,这对于接收端正确解析并播放数据至关重要。 #### stream_type字段值解析 接下来,我们将详细介绍文档中列出的不同`stream_type`字段值及其对应的含义: - **0x...
标题“es1.6_es_sink”和描述“es1.6 elasticsearch5 sink”都指向一个关键主题,即使用Flume 1.6版本将数据流传输到Elasticsearch 5.0版本的接收器(sink)。Flume是Apache开发的一个分布式、可靠且可用于有效收集...
elasticsearch-7.9.2-x86_64.rpm
elasticsearch7.5集群搭建_kibana
arcgis elasticSearch es 矢量数据导入插件 数据建模 mapping indexsetting 字段映射 索引建模支持geoshape、shape,text索引支持keyword/ngram/edgeNgram/ikSmart,快速导入,兼容multipolygon,带洞,多面,使用时...
Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene库构建,被广泛用于大数据分析、日志聚合、实时搜索和索引等场景。官方提供的测试数据集是检验Elasticsearch功能、性能和稳定性的关键资源,可以帮助...
"ES的图形化界面插件"这一标题意味着我们将讨论如何为ElasticSearch安装和使用head插件。ElasticSearch原生并不自带图形界面,因此开发者或管理员通常需要借助如Kibana这样的工具来可视化数据和管理集群。然而,head...
在Linux环境下,可以直接运行`./elasticsearch`命令来启动服务,但在此之前,为了确保服务稳定运行,还需要进行一些必要的环境配置,比如设置合适的堆内存大小(可以通过`ES_JAVA_OPTS`环境变量指定)。 `config`...
- **过滤和映射**:`elasticsearch-dump`允许你在导入和导出时应用过滤器,只处理特定字段或满足条件的文档。此外,还可以指定映射,确保目标索引具有正确的字段结构。 - **分块导出导入**:对于大型数据集,可以...
**Elasticsearch Java 开发详解** Elasticsearch 是一个分布式、全文检索的搜索引擎,它以其高效、可扩展和易用性而广泛应用于日志分析、信息检索、网站搜索等领域。在Java环境中,我们可以使用官方提供的Java API...