深入理解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)逐渐成为众多中学生学习编程、展示才华的热门赛事。这项被誉为“编程天才选拔赛”的竞赛,不仅考验学生的编程能力、算法思维,更是通向名校…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
