深入理解Elasticsearch的`_source`字段与索引优化

在Elasticsearch (ES) 中,_source字段是一个关键组件,它不仅决定了数据的存储方式,还影响到查询时返回的内容。在某些场景下,我们可以通过配置_source来优化存储和性能,尤其是当我们希望减少存储空间或避免返回某些字段时。本篇博客将详细介绍如何通过_sourceexcludes 选项排除字段存储,但仍然保留其索引功能的操作原理及应用场景。

1. 什么是_source字段?

_source是每个文档在Elasticsearch中存储的原始数据。默认情况下,当你索引文档时,整个文档的数据会被存储在_source中,ES会将其完整存储并在查询时返回。当你进行GET请求获取文档时,返回的正是这个_source数据。

但是,在某些情况下,我们可能不希望存储所有字段的值,尤其是一些大型的文本字段。此时,通过配置_sourceexcludes选项,我们可以决定不将这些字段存储下来,但它们仍然可以被索引用于查询。

2. mappings中的_source配置示例

以下是一个mappings定义的示例,其中我们通过_sourceexcludes选项排除了两个字段:full_text_claimfull_text_description

"mappings": {"_doc": {"_source": {"excludes": ["full_text_claim","full_text_description"]},"properties": {"full_text_claim": {"type": "text"},"full_text_description": {"type": "text"},// 其他字段定义...}}
}

解读

  • _source字段的排除:通过 excludes 选项,我们明确排除了 full_text_claimfull_text_description。这意味着在存储文档时,这两个字段的原始数据不会被保存下来。
  • 索引功能依然保留:虽然没有存储这两个字段的数据,但它们依然可以被索引,也就是说,你依然可以基于这些字段进行查询和检索。
3. 为什么要排除某些字段?

在实际应用中,排除一些不需要存储的字段有以下几个好处:

  1. 节省存储空间:有些字段(例如全文本数据)可能非常大。如果你不需要这些字段在查询时返回,则可以选择不将它们存储在 _source 中,这样可以减少磁盘空间的占用。

  2. 提升索引效率:在写入文档时,ES 需要将每个字段的数据保存到 _source 中。如果某些字段的数据量较大,通过排除它们可以提升索引写入的效率,特别是对于高频写入的场景。

  3. 保护数据隐私:某些字段可能包含敏感数据,比如客户的隐私信息或机密字段。通过不存储这些字段,可以防止它们在查询结果中被返回,从而提升数据安全性。

  4. 减少网络开销:如果某些字段数据量大且在查询时不需要返回,排除它们可以减少查询时的数据量,提升响应速度,减少网络传输的负担。

4. 排除字段后,仍然可以检索吗?

这是一个关键问题:即使我们不存储某些字段,它们仍然可以用于查询和检索

在上面的 mappings 配置中,full_text_claimfull_text_description 虽然没有被存储在_source中,但由于它们被索引了,仍然可以用于全文检索。这意味着你依然可以基于这两个字段的数据进行搜索和查询操作。例如:

{"query": {"match": {"full_text_claim": "some search term"}}
}

这段查询语句依然可以正常运行,并返回匹配到的文档。这是因为虽然这些字段的原始数据没有存储下来,但它们的数据已经被索引,因此可以参与全文搜索。

5. 索引 vs 存储:二者的区别

在Elasticsearch中,需要明确区分索引和存储的区别:

  • 索引 (Indexing):当某个字段被索引时,它的数据会被ES处理并构建索引,用于查询操作。即使该字段不被存储,它仍然可以参与搜索。

  • 存储 (Storing):存储是指将字段的原始数据保存到_source中,方便在查询时将完整的数据返回给客户端。如果某个字段没有被存储,那么查询时无法返回其原始数据。

因此,即使字段被排除在_source之外,它依然可以参与查询,但查询结果中不会返回该字段的原始数据。

6. 如何控制哪些字段需要存储?

通过以下配置,可以决定哪些字段存储,哪些不存储:

"_source": {"excludes": ["field_name1", "field_name2"]
}

如果你希望某个字段不仅被索引,还能存储并在查询时返回,可以将其从excludes中移除,或者完全省略 excludes

"_source": {"excludes": []
}
7. 具体应用场景举例
  1. 全文检索应用:对于大型的文本字段,例如专利的详细描述、法律条款等,通常我们需要对其进行全文检索,但不需要每次查询都返回完整文本。通过排除字段的存储,只索引这些字段,可以提高系统性能。

  2. 日志系统优化:在日志分析系统中,某些字段可能包含详细的日志信息(例如堆栈跟踪、错误详情等),这些数据通常用于检索和分析,但不需要频繁返回给用户。通过排除这些字段的存储,可以显著减少存储需求。

  3. 敏感数据处理:某些系统中的数据(例如用户的隐私信息、交易详情等)可能包含敏感信息。为了确保数据隐私,开发者可能希望这些数据仅用于查询,而不直接返回给客户端。

8. 如何查询排除字段?

如果某些字段被排除在存储之外,你仍然可以在查询时通过这些字段进行检索,但无法直接返回这些字段的内容。你可以指定只返回那些未被排除的字段,例如:

{"_source": ["title", "app_date"],"query": {"match_all": {}}
}

这将返回文档中 titleapp_date 字段的数据,而不会返回被排除的 full_text_claimfull_text_description

9. 总结

Elasticsearch 提供了灵活的 _source 配置,允许我们通过 excludes 来排除不需要存储的字段。这样做的好处包括节省存储空间、提高写入效率、减少网络负担,以及确保数据隐私。同时,即使字段不被存储,它们依然可以被索引,用于查询和检索。理解并合理配置_source字段,能有效优化系统性能,适应不同的应用场景需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/53464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何保障Kubernetes集群安全?

如何保障Kubernetes集群安全? 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes通过多重机制保障集群安全,主要包括: 容器隔离:容器与宿主机隔离,防止相互影响。权限控制:遵循最小权限原则,限制组件和用户权限,使用RBAC进行细粒度管理。API Server安全:通过认证…

如何让linux程序在后台执行

怎么让linux程序在后台执行: 一、在命令末尾添加 “&” 符号 例如,要运行一个名为 my_program 的程序并让它在后台执行,可以这样做: my_program &执行这个命令后,程序会在后台运行,终端会立即返回…

华为OD机试真题 - 二叉树的广度优先遍历 - 二叉树(Python/JS/C/C++ 2024 D卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

(六十二)第 9 章 查找(开放定址哈希表)

示例代码 hashTable.h // 开放定址哈希表的存储结构实现头文件#ifndef HASH_TABLE_H #define HASH_TABLE_H#include "errorRecord.h"#define NULL_KEY -2 #define NUM 10#define SUCCESS 1 #define UNSUCCESS 0 #define DUPLICATE -1#define EQUAL(a, b) ((a) == (b)…

Github 2024-09-07Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-09-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10CUE项目1Python项目1Go项目1Polars: Rust中的DataFrame接口和OLAP查询引擎 创建周期:1354 天开发语言:Rust, Python协议类型:MIT …

Ubuntu之源码编译安装nginx

参考:Ubuntu之源码编译安装nginx_ubuntu编译安装nginx-CSDN博客 1.下载源码后进入源码目录,如下: cd /home/jq/wf/nginx-1.26.1 2.下载相应依赖库: apt-get install libpcre3-dev apt-get install openssl libssl-dev apt-get…

基于STM32设计的ECG+PPG人体参数测量系统(华为云IOT)(217)

文章目录 一、前言1.1 项目介绍【1】开发背景【2】项目实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】整体构架【3】上位机开发思路【4】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】摘要【5】项目背景1.4 开发…

神经网络骨架nn.Module

文章目录 一、认识nn.Module二、nn.Module的基础加1操作 一、认识nn.Module nn.Module 是 PyTorch 中的一个核心类,它是所有神经网络模块的基类。在 PyTorch 中构建模型时,通常会继承这个类来创建自定义的网络结构。nn.Module 提供了一系列用于构建神经…

MATLAB 中的矩阵切片操作详解(细节无敌)

在 MATLAB 中,矩阵切片(Matrix Slicing)是一种非常常用的操作,用于从矩阵或数组中提取子集。这种操作非常灵活,可以通过指定行和列的索引来获取子矩阵。矩阵切片在数据处理、算法设计、图像处理等许多领域都非常有用。…

QT中tr的作用是什么

在Qt框架中,tr() 函数是一个非常重要的宏,它用于国际化和本地化(i18n和l10n)支持。tr() 函数使得Qt应用程序能够根据不同的语言环境(locale)显示相应的翻译文本,从而支持多种语言。 具体来说&a…

如何在Word中插入复选框

如何在Word中插入复选框:详细教程与技巧 在Word中插入复选框是一项非常实用的技巧,尤其是在制作问卷调查、待办事项清单、交互式表单或文档中需要用户进行选择时,复选框不仅能提高文档的功能性,还能显得更加专业。本文将详细讲解…

2024 年高教社杯全国大学生数学建模竞赛 C 题 农作物的种植策略 完整参考论文

持续更新中,2024年数学建模比赛思路代码论文都会发布到专栏内,只需订阅一次! 完整论文+代码+数据结果链接在文末! 订阅后可查看参考论文文件 1 介绍 1.1 背景 乡村振兴是我国现代化建设的重要战略之一,而农业产业的可持续发展则是其中的核心内容。特别是在耕地资源有限的…

嵌入式软件--51单片机 DAY 4

一、蜂鸣器 当电流通过线圈时会产生电磁场,电磁场与永磁体相互作用,从而使金属膜产生震动而发声。为使金属膜持续震动,蜂鸣器需要使用震荡电路进行驱动。有些蜂鸣器元件内部自带震荡驱动电路,这种蜂鸣器叫做有源蜂鸣器&#xff0…

idea问题解决:java: -source 7 中不支持 方法引用 (请使用 -source 8 或更高版本以启用 方法引用)

以下是AI生成 :鱼聪明AI - 做您强大的AI助手 这个错误信息表明你尝试使用了Java 8中引入的方法引用特性,但是你的编译器设置使用的源代码版本是Java 7。方法引用是Java 8中引入的一个新特性,允许你以更简洁的方式调用方法。 要解决这个问题…

计算机网络 TCP/IP协议篇

今天学习了TCP/IP协议的相关知识,学习笔记如下: 在学习之前,我们先抛出几个问题,什么是TCP/IP协议簇?TCP/IP协议簇是怎么工作的? TCP/IP模型 协议分层 每层通过协议完成各自特定的功能上层依赖下层提供…

24/9/6算法笔记 kaggle 房屋价格

预测模型主要分为两大类: 回归模型:当你的目标变量是连续的数值时,你会使用回归模型进行预测。回归模型试图找到输入特征和连续输出之间的关联。一些常见的回归模型包括: 线性回归(Linear Regression)岭回归…

some electronic products

纽扣电池 button cell 运动手环 sports wristband 智能手环 smart bracelet 皮卡丘夜灯 pikachu night lamp 数字显示充电器 Charger with a digital display 磁吸无线充 magnetic wireless charger 直流电机调速器 DC motor speed controller 继电器模块 relay module 锂离子电…

学不会虚拟列表?10分钟带你实现高度固定的Vue虚拟列表方案及原理

前言 本文主要介绍长列表的一种优化方案:虚拟列表。本文主要是对传统的虚拟列表方案进行更加详尽的刨析,以便我们能够更加深入理解虚拟列表的原理。 虚拟列表目录 1、为什么需要使用虚拟列表2、什么是虚拟列表与懒加载的区别(重要) 3、实现思路4、通过节…

SAP PO附件上传报错 输入时错

SAP PO附件上传报错 场景: 在SAP采购订单上传附件时,出现了SO424报错 Error occurred during import(输入时错),报错界面如下图所示: 分析: 输入事务代码SLG1,在User处输入自己的用户名并运行报表。本案例…

统计学习方法与实战——统计学习方法之感知机

感知机 感知机三要素分析模型策略损失函数选择 算法原始形式对偶形式 相关问题 例子iris数据集分类实战数据集查看 显示结果sklearn 实战感知机 习题解答习题2.1解题步骤反证法 习题2.2习题2.3凸壳线性可分线性可分证明凸壳不相交证明充分性:凸壳不相交\Rightarrow⇒…