`
m635674608
  • 浏览: 5063024 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

elasticsearch的store属性跟_source字段

 
阅读更多

众所周知_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,则只能检索不能展示。
 
 
http://www.ithao123.cn/content-9317140.html

 

分享到:
评论

相关推荐

    ES之_source字段详解

    在Elasticsearch(以下简称ES)中,_source字段扮演着至关重要的角色。它包含了索引时传递的原始JSON文档体。了解和掌握_source字段的工作原理对于优化查询性能、提高数据检索效率至关重要。 #### 二、_source字段...

    Elasticsearch 技术解析与实战.zip

    前言 第1章 Elasticsearch入门 1 1.1 Elasticsearch是什么 1 1.1.1 Elasticsearch的历史 2 1.1.2 相关产品 3 1.2 全文搜索 3 1.2.1 Lucene介绍 4 1.2.2 Lucene倒排索引 4 1.3 基础知识 6 1.3.1 Elasticsearch术语及...

    Elasticsearch测试医疗数据

    对于XML数据,Logstash提供了XML输入插件,可以解析XML文档并将其字段映射到Elasticsearch索引的字段。 创建Logstash配置文件时,我们需要定义输入、过滤和输出三个部分。输入部分设置为读取XML文件,例如: ```...

    Elasticsearch的javaapi使用.pdf

    在这个示例中,定义了一个名为"title"的字段,它是一个字符串类型,并且设置为存储(store)在Elasticsearch中。构建器模式用于构建JSON结构的映射。 除了映射,还可以为索引设置某些属性,例如启用时间戳字段来...

    芒果TV ELK日志系统实践 -刘波涛

    本文将详细介绍芒果TV在ELK(Elasticsearch、Logstash、Kibana)日志系统实践中的经验与心得,特别是针对日志收集、存储、分析等环节的关键技术和优化策略。 #### 二、背景介绍 在2015年10月17日举办的ES国内...

    ElasticSearchServer扩展的弹性搜索解决方案.docx

    ElasticSearch 支持多种字段类型,包括但不限于: - **字符型**:适用于文本和字符串。 - **数值型**:支持整数和浮点数。 - **布尔型**:存储布尔值。 - **二进制型**:存储二进制数据。 - **multi_field 类型**:...

    lucene.net:svn存储库中的实际源代码-apache source code

    2. **Elasticsearch.NET**:针对流行的分布式搜索引擎Elasticsearch的.NET客户端,提供了丰富的API和高级特性。 通过深入研究和理解Lucene.Net的源代码,开发者不仅可以掌握搜索引擎的基本原理,还能根据具体需求对...

Global site tag (gtag.js) - Google Analytics