深入理解Elasticsearch的`_source`字段与索引优化
在Elasticsearch (ES) 中,_source字段是一个关键组件,它不仅决定了数据的存储方式,还影响到查询时返回的内容。在某些场景下,我们可以通过配置_source来优化存储和性能,尤其是当我们希望减少存储空间或避免返回某些字段时。本篇博客将详细介绍如何通过_source的 excludes 选项排除字段存储,但仍然保留其索引功能的操作原理及应用场景。
1. 什么是_source字段?
_source是每个文档在Elasticsearch中存储的原始数据。默认情况下,当你索引文档时,整个文档的数据会被存储在_source中,ES会将其完整存储并在查询时返回。当你进行GET请求获取文档时,返回的正是这个_source数据。
但是,在某些情况下,我们可能不希望存储所有字段的值,尤其是一些大型的文本字段。此时,通过配置_source的excludes选项,我们可以决定不将这些字段存储下来,但它们仍然可以被索引用于查询。
2. mappings中的_source配置示例
以下是一个mappings定义的示例,其中我们通过_source的excludes选项排除了两个字段:full_text_claim和full_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_claim和full_text_description。这意味着在存储文档时,这两个字段的原始数据不会被保存下来。- 索引功能依然保留:虽然没有存储这两个字段的数据,但它们依然可以被索引,也就是说,你依然可以基于这些字段进行查询和检索。
3. 为什么要排除某些字段?
在实际应用中,排除一些不需要存储的字段有以下几个好处:
-
节省存储空间:有些字段(例如全文本数据)可能非常大。如果你不需要这些字段在查询时返回,则可以选择不将它们存储在
_source中,这样可以减少磁盘空间的占用。 -
提升索引效率:在写入文档时,ES 需要将每个字段的数据保存到
_source中。如果某些字段的数据量较大,通过排除它们可以提升索引写入的效率,特别是对于高频写入的场景。 -
保护数据隐私:某些字段可能包含敏感数据,比如客户的隐私信息或机密字段。通过不存储这些字段,可以防止它们在查询结果中被返回,从而提升数据安全性。
-
减少网络开销:如果某些字段数据量大且在查询时不需要返回,排除它们可以减少查询时的数据量,提升响应速度,减少网络传输的负担。
4. 排除字段后,仍然可以检索吗?
这是一个关键问题:即使我们不存储某些字段,它们仍然可以用于查询和检索。
在上面的 mappings 配置中,full_text_claim 和 full_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. 具体应用场景举例
-
全文检索应用:对于大型的文本字段,例如专利的详细描述、法律条款等,通常我们需要对其进行全文检索,但不需要每次查询都返回完整文本。通过排除字段的存储,只索引这些字段,可以提高系统性能。
-
日志系统优化:在日志分析系统中,某些字段可能包含详细的日志信息(例如堆栈跟踪、错误详情等),这些数据通常用于检索和分析,但不需要频繁返回给用户。通过排除这些字段的存储,可以显著减少存储需求。
-
敏感数据处理:某些系统中的数据(例如用户的隐私信息、交易详情等)可能包含敏感信息。为了确保数据隐私,开发者可能希望这些数据仅用于查询,而不直接返回给客户端。
8. 如何查询排除字段?
如果某些字段被排除在存储之外,你仍然可以在查询时通过这些字段进行检索,但无法直接返回这些字段的内容。你可以指定只返回那些未被排除的字段,例如:
{"_source": ["title", "app_date"],"query": {"match_all": {}}
}
这将返回文档中 title 和 app_date 字段的数据,而不会返回被排除的 full_text_claim 和 full_text_description。
9. 总结
Elasticsearch 提供了灵活的 _source 配置,允许我们通过 excludes 来排除不需要存储的字段。这样做的好处包括节省存储空间、提高写入效率、减少网络负担,以及确保数据隐私。同时,即使字段不被存储,它们依然可以被索引,用于查询和检索。理解并合理配置_source字段,能有效优化系统性能,适应不同的应用场景需求。
相关文章:
深入理解Elasticsearch的`_source`字段与索引优化
在Elasticsearch (ES) 中,_source字段是一个关键组件,它不仅决定了数据的存储方式,还影响到查询时返回的内容。在某些场景下,我们可以通过配置_source来优化存储和性能,尤其是当我们希望减少存储空间或避免返回某些字段…...
Pikachu靶场
先来点鸡汤,少就是多,慢就是快。 环境搭建 攻击机kali 192.168.146.140 靶机win7 192.168.146.161 下载zip,pikachu - GitCode 把下载好的pikachu-master,拖进win7,用phpstudy打开网站根目录,.....再用…...
TS axios封装
方式一 service/request/request.ts import axios from axios import { ElLoading } from element-plus import type { AxiosRequestConfig, AxiosInstance, AxiosResponse } from axios import type { ILoadingInstance } from element-plus/lib/el-loading/src/loading.typ…...
学会使用西门子博途Startdrive中的测量功能
工程师在驱动调试过程中,往往需要对驱动系统的性能进行分析及优化,比如说借助于调试软件中的驱动器测量功能,可以得到驱动系统的阶跃响应、波特图等,以此为依据工程师可以调整速度控制器、电流控制器的相关参数,使驱动…...
Spring Security认证与授权
1 Spring Security介绍 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。由于它是Spring生态系统中的一员,因此它伴随着整个Spring生态系统不断修正、升级,在spring boot项目中加入springsecurity更是…...
速通GPT:Improving Language Understanding by Generative Pre-Training全文解读
文章目录 速通GPT系列几个重要概念1、微调的具体做法2、任务感知输入变换3、判别式训练模型 Abstract概括分析和观点1. 自然语言理解中的数据问题2. 生成预训练和监督微调的结合3. 任务感知输入变换4. 模型的强大性能 Introduction概括分析和观点1. 自然语言理解的挑战在于对标…...
软件质量保证例题
答案:D 软件质量保证 功能性 适合性 准确性 互操作性 安全保密性 依从性 可靠性 成熟性 容错性 易恢复性 易用性 易理解性 易学性 易操作性 效率 时间特性 资源利用性 维护性 易分析性 易改变性 稳定性 易测试性 可移植性 适应性 易安装性 一致性 易替换…...
动态规划算法---04.斐波那契数列模型_解码方法_C++
题目链接:91. 解码方法 - 力扣(LeetCode)https://leetcode.cn/problems/decode-ways/description/ 一、题目解析 题目: 题目大意:从题目中我们可以知道,解码就是在字符串s中由‘1’到‘26’的字符可以转化…...
crm如何做私域运营?
流量获取的挑战日益增加,客户线索成本高、客户资源流失严重、转化率低,因此,私域流量管理已成为关键。 当前挑战 1、公域流量难以整合:外部流量分散,难以有效汇总和沉淀。 2、私域运营体系缺失:缺乏有效沟…...
基于QGIS 3.16.0 的OSM路网矢量范围裁剪实战-以湖南省为例
目录 前言 一、相关数据介绍 1、OMS路网数据 2、路网数据 3、路网图层属性 二、按省域范围进行路网裁剪 1、裁剪范围制定 2、空间裁剪 3、裁剪结果 三、总结 前言 改革开放特别是党的十八大以来,我国公路发展取得了举世瞩目的成就。国家高速公路网由“7 射…...
WPF 手撸插件 八 依赖注入
本文内容大量参考了:https://www.cnblogs.com/Chary/p/11351457.html 而且这篇文章总结的非常好。 1、注意想使用Autofac,Autofac是一个轻量级、高性能的依赖注入(DI)框架,主要用于.NET应用程序的组件解耦和…...
走进低代码报表开发(一):探秘报表数据源
在前文当中,我们对勤研低代码平台的流程设计功能进行了介绍。接下来,让我们一同深入了解在企业日常运营中另一个极为常见的报表功能。在当今数字化时代,高效的报表生成对于企业的决策至关重要。勤研低代码开发平台能够以卓越的性能和便捷的操…...
代理服务器及其原理
代理服务器的代理可以分为正向代理和反向代理,本篇将讲解这两种代理方式的原理,以及对应的功能特点和应用场景。最后还对比和 NAT 和代理服务器的区别。 目录 正向代理 工作原理 功能特点 应用场景 反向代理 基本原理 应用场景 NAT和代理服务器…...
计算机毕业设计选题推荐-养老院管理系统-Java/Python项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...
免费SSL证书正在逐渐被淘汰,证书部署自动化的发展趋势即将到来!
目录 背景解决方案。1.使用自签证书(浏览器报警、免费)2.更换支持自签自续的CA机构(免费)3.付费选择CA机构 免费SSL证书正在逐渐被淘汰,证书部署自动化的发展趋势即将到来免费的SSL证书有以下弊端1.有效期短࿱…...
openVX加速-基本概念和简单代码实现
OpenVX 是一个用于计算机视觉和图像处理的跨平台加速标准库,旨在提高在异构平台(如 CPU、GPU、DSP 等)上的执行效率。OpenVX 提供了一组优化的、可移植的 API,用于加速常见的视觉算法,使开发者能够在不同硬件平台上实现…...
网工内推 | 网络工程师,Base上海,HCIP/HCIE认证优先
01 利宏科技 🔷招聘岗位:网络工程师 🔷任职要求 1、有HCIE、HCIP证书 2、做过IDC机房网络建设 3、本科毕业 4、熟悉基本linux命令 5、熟悉山石、华为等防火墙 6、熟悉IPS、WAF等安全设备 7、做过同城灾备机房建设优先 🔷薪…...
Windows10 如何配置python IDE
Windows10 如何配置python IDE 前言Python直接安装(快速上手)Step1.找到网址Step2.选择版本(非常重要)Step3. 安装过程Step4. python测试 Anaconda安装(推荐,集成了Spyder和Pycharm的安装)Step1…...
Machine Learning: A Probabilistic Perspective 机器学习:概率视角 PDF免费分享
下载链接在博客最底部!! 之前需要参考这本书,但是大多数博客都是收费才能下载本书。 在网上找了好久才找到免费的资源,浪费了不少时间,在此分享以节约大家的时间。 链接: https://pan.baidu.com/s/1erFsMcVR0A_xT4fx…...
信息学奥赛:青少年编程的高光舞台,通向未来科技的敲门砖
近年来,信息学奥林匹克竞赛(NOI,National Olympiad in Informatics)逐渐成为众多中学生学习编程、展示才华的热门赛事。这项被誉为“编程天才选拔赛”的竞赛,不仅考验学生的编程能力、算法思维,更是通向名校…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
