当前位置: 首页 > news >正文

深入理解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字段,能有效优化系统性能,适应不同的应用场景需求。

相关文章:

深入理解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.有效期短&#xff1…...

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)逐渐成为众多中学生学习编程、展示才华的热门赛事。这项被誉为“编程天才选拔赛”的竞赛,不仅考验学生的编程能力、算法思维,更是通向名校…...

【JavaEE】-- HTTP

1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

SpringCloudGateway 自定义局部过滤器

场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...