设置索引的时候,我们给某些字段的store属性设置为true,在查询时,请求中可以携带stored_fields参数,指定某些字段,最后,这些字段会被包含在返回的结果中。如果请求中携带的字段没有被储存,将会被忽略。

默认的场景

我们先观察没有设置store属性的字段情况。

我们新增一个document,并利用自动生成索引功能创建索引:

PUT twitter2/_doc/1
{"user" : "kimchy","post_date" : "2009-11-15T14:12:12","message" : "trying out Elasticsearch"
}查看index结构```yaml
GET twitter2
{"twitter2": {"aliases": {},"mappings": {"_doc": {"properties": {"message": {     //默认没有store属性"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"post_date": {   //默认没有store属性"type": "date"},"user": {   //默认没有store属性"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}},

创建索引时,没有特别设置的话,默认没有store属性

检索数据:

{"_index": "twitter2","_type": "_doc","_id": "1","_version": 1,"_seq_no": 0,"_primary_term": 1,"found": true,"_source": {      //默认查询数据,返回的属性字段都在_source中"user": "kimchy","post_date": "2009-11-15T14:12:12","message": "trying out Elasticsearch"}
}

//默认查询数据,返回的属性字段都在_source中

设置store属性的场景

创建索引twitter,并设置tags字段的store属性为true

PUT twitter
{"mappings": {"_doc": {"properties": {"counter": {"type": "integer","store": false        //默认值就是false},"tags": {"type": "keyword","store": true      //修改值为true}}}}
}

查看索引:

GET twitter
{"twitter": {"aliases": {},"mappings": {"_doc": {"properties": {"counter": {"type": "integer"    //没有显示store属性,说明默认值为否},"tags": {"type": "keyword","store": true         //store属性为true}}}}

现在我们可以添加 document:

PUT twitter/_doc/1
{"counter" : 1,"tags" : ["red"]
}

尝试带stored_fields参数去检索:

GET twitter/_doc/1?stored_fields=tags,counter

以上get操作的结果是:

{"_index": "twitter","_type": "tweet","_id": "1","_version": 1,"found": true,"fields": {           //此时多了名称为fields的字段,并且没有了_source"tags": [          //tags的stroe属性设置为true,因此显示在结果中"red"]}
}

从 document 中获取的字段的值通常是array。

由于counter字段没有存储,当尝试获取stored_fields时get会将其忽略。

总结

其实不管你将store设置为ture or false, elasticsearch都将为我们存储这些field, 不同的是:

  • 当store为false时(默认配置),这些field只存储在"_source" field中。
  • 当store为true时,这些field的value会存储在一个跟 _source 平级的独立的field中。同时也会存储在_source中,所以有两份拷贝。

那么什么情况下需要设置store field呢?一般情况有两种情况:

  • _source field在索引的mapping 中disable了。
    这种情况下,如果不将某个field定义成store=true,那些将无法在返回的查询结果中看到这个field。
  • _source的内容非常大。
    这时候如果我们想要在返回的_source document中解释出某个field的值的话,开销会很大(当然你也可以定义source filtering将减少network overhead),比如某个document中保存的是一本书,所以document中可能有这些field: title, date, content。假如我们只是想查询书的title 跟date信息,而不需要解释整个_source(非常大),这个时候我们可以考虑将title, date这些field设置成store=true。

ES stored fields作用相关推荐

  1. 【Elasticsearch】Lucene 中的 Stored Fields 存储优化 自定义 存储类型 序列化 方式

    1.概述 转载:Lucene 中的 Stored Fields 存储优化 1 背景 Qunar 酒店的搜索和 suggest 是基于 Lucene 构建的,在我们的使用场景中,由于召回和排序是作为两个 ...

  2. ES _source字段介绍——json文档,去掉的话无法更新部分文档,最重要的是无法reindex...

    摘自:https://es.xiaoleilu.com/070_Index_Mgmt/31_Metadata_source.html The _source field stores the JSON ...

  3. java 导出es数据_elasticseach 数据的导出与导出工具elasticdump使用

    Centos下安装elasticdump yum install elasticdump 安装完成后 [root@i-vvxxxxswtw5ne ~]# elasticdump --help elas ...

  4. ES压测工具(一):esrally工具入门与实践

    一.esrally工具介绍 esrally是基于python的针对ES(Elasticsearch)实现压测的工具 rally的定义是the macrobenchmarking framework f ...

  5. ES压测工具(四):esrally实例操作

    一.针对ES版本压测数据对比 针对ES2.4.6与ES5.6.0进行性能对比,前提是在同一压测数据集和压测方案条件下进行 1.针对ES2.4.6版本进行压测(~/.rally/benchmarks/t ...

  6. es中document的主键id及局部更新

    很多介绍es的文章,都会说一下lucene的不足,其中两条有迷惑: 1. lucene的document没有全局唯一的主键id 2. lucene不支持更新. 疑惑点1:没有主键id. 可以用luce ...

  7. ES VS CK,成本太高,效率太低?不存在的

    文章目录 ES占用内存多? Off-Heap ES占用存储多? ES指标型数据存储压缩 ES日志数据存储压缩 ES Schema On Read Searchable Snapshot ES的读写速度 ...

  8. 一、搜索引擎篇-揭开es神秘的面纱

    一.es是什么? elasticsearch是一个开源的分布式.RESTful 风格的搜索和数据分析引擎,它的底层是开源库lucene. 二.lucene是什么? 最受欢迎的java开源全文搜索引擎开 ...

  9. ElasticSearch搜索引擎:常用的存储mapping配置项 与 doc_values详细介绍

    一.ES的数据存储结构: ES底层使用 Lucene 存储数据,Lucene 的索引包含以下部分: A Lucene index is made of several components: an i ...

  10. elasticsearch_script_01

    文章目录 1. script 简述 1. script的类型和作用 2. script使用的方式 2. script的使用场景 1. update scripts 2. search 和agg 中使用 ...

最新文章

  1. 【Ubuntn】Ubuntu随笔
  2. 索引,表增删改统计,加锁查具体情况(推荐)
  3. jQuery 表格自动增加
  4. python pip安装失败vtk_安装最新的VTK库验证安装出错该怎么解决
  5. 01初识鸿蒙_移动通讯技术的发展
  6. java设置文件为文件夹_如何为文件夹及其所有子文件夹和文件设置chmod? [关闭]...
  7. BZOJ 1072 排列
  8. vb odbc数据源 oracle,vb.net写的odbc连接dsn数据源和ole链接oracle的小例子
  9. 带你玩转Visual Studio(八)——带你跳出坑爹的Runtime Library坑
  10. mapguide 安装调试
  11. DhtmlGantt案例-弹窗lightbox自定义字段
  12. 行为树 --- [4] 简单树
  13. MYSQL导入数据出现ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it
  14. java打开jnlp_如何打开jnlp
  15. centos8 合上笔记本盖子不休眠,不断网
  16. Protocol handler start failed
  17. crsctl命令详解
  18. 蓝桥杯:试题 算法训练 采油区域 矩阵前缀和+动态规划+分治+枚举
  19. 随时随地访问家里搭建的私有存储(tfcenter)
  20. Yandex企业邮箱注册

热门文章

  1. linux服务器挂载ntfs u盘,如何在linux下挂载NTFS格式的U盘或硬盘。
  2. 儿子:特训营归来,许三多算个屁!(转)
  3. 传苹果将采用:夏普IGZO技术面板量产
  4. mysql spatial简介_详细介绍mysql索引类型:FULLTEXT、NORMAL、SPATIAL、UNIQUE
  5. 打造一款可靠的WAF(Web应用防火墙)
  6. 2019年系统架构设计师考试总结
  7. mysql 唯一性榆树_榆树有多少种
  8. VS2019:添加现有项目 / 现有cpp文件
  9. Period 、Duration常用方法使用与介绍
  10. Raspberry Pi OS 2022年09月发布,安装及成功连接。