【Elasticsearch】runtime_mappings搜索请求中定义运行时字段

在 Elasticsearch 中,在搜索请求中定义运行时字段(Runtime Fields)是一种强大的功能,允许用户在查询时动态添加和计算字段,而无需预先在索引映射中定义这些字段。这种方式提供了极大的灵活性,尤其是在处理动态数据结构或需要临时计算字段值的场景中。

运行时字段的核心概念

运行时字段基于“读时模式(Schema on Read)”的概念,允许用户在查询时定义字段的映射和计算逻辑。与传统的索引字段不同,运行时字段不会被存储或索引,因此不会增加存储成本。它们仅在查询执行时动态计算,并可用于查询、聚合和排序。

在搜索请求中定义运行时字段

运行时字段可以通过在搜索请求中添加`runtime_mappings`部分来定义。其语法与在索引映射中定义运行时字段的语法相同。例如:

```json

GET my-index-000001/_search

{

  "runtime_mappings": {

    "day_of_week": {

      "type": "keyword",

      "script": {

        "source": "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ENGLISH))"

      }

    }

  },

  "query": {

    "match_all": {}

  },

  "aggs": {

    "day_of_week_terms": {

      "terms": {

        "field": "day_of_week"

      }

    }

  }

}

```

在这个例子中:

1. `runtime_mappings`部分定义了一个名为`day_of_week`的运行时字段,其类型为`keyword`。

2. 使用 Painless 脚本从`@timestamp`字段计算出一周中的某一天(如“Monday”)。

3. 该字段可以用于查询、聚合或排序。

运行时字段的优势

1. 动态性:运行时字段允许在查询时动态计算字段值,无需预先索引。

2. 节省存储空间:由于运行时字段不会被存储或索引,因此不会增加索引的存储成本。

3. 灵活性:运行时字段可以覆盖索引映射中已有的字段,或者添加新的字段,而无需修改索引结构。

4. 查询功能:运行时字段支持几乎所有的查询功能,包括聚合、过滤和排序。

使用场景

运行时字段适用于以下场景:

1. 动态数据结构:当数据结构不固定或需要动态解析字段时。

2. 临时字段:当需要临时计算字段值而不存储这些值时。

3. 纠正索引映射错误:如果字段被错误地映射为不适合的类型(如将数值字段映射为`text`),运行时字段可以覆盖这些字段的类型。

运行时字段的限制

尽管运行时字段提供了极大的灵活性,但它们也有一些限制:

1. 性能影响:由于运行时字段是在查询时动态计算的,因此可能会对查询性能产生一定影响。

2. 不可用于`_source`:运行时字段不会出现在`_source`中,只能通过`fields`参数返回。

示例:使用运行时字段进行聚合

假设您需要对某个字段进行聚合,但该字段未被索引为合适的类型,您可以使用运行时字段来解决这个问题。例如:

```json

PUT my-index-000001/_mapping

{

  "runtime": {

    "measures.start": {

      "type": "long"

    }

  }

}

 

GET my-index-000001/_search

{

  "aggs": {

    "avg_start": {

      "avg": {

        "field": "measures.start"

      }

    }

  }

}

```

在这个例子中,运行时字段`measures.start`被定义为`long`类型,从而可以对其进行聚合。

总结

运行时字段是 Elasticsearch 中一种强大的功能,允许用户在查询时动态定义和计算字段值。它们提供了灵活性和动态性,同时节省了存储空间。然而,运行时字段可能会对查询性能产生一定影响,因此需要根据具体场景进行权衡。

 

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

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

相关文章

数学建模基础训练-1:概念解析

文章目录 数学建模基础训练-1:概念解析问题一:如何找到“概念”?问题二:如何全面理解概念的基础含义?问题三:如何深刻理解概念并作出创新点发掘?实际举例问题一 :研究并给出寒假开学某大学返校交…

【Linux基础】Linux下常用的系统命令

文章目录 一、前言二、系统监控和进程管理指令2.1 ps命令2.2 top命令2.3 kill命令2.4 shutdown命令 三、文件和目录管理指令3.1 cd命令3.2 ls命令3.3 mkdir命令3.4 cat 命令3.5 cp命令3.6 mv命令3.7 rm命令3.8 chmod命令3.9 ln命令3.10 pwd命令 四、文件查找和文本处理指令4.1 …

mysql读写分离与proxysql的结合

上一篇文章介绍了mysql如何设置成主从复制模式,而主从复制的目的,是为了读写分离。 读写分离,拿spring boot项目来说,可以有2种方式: 1)设置2个数据源,读和写分开使用 2)使用中间件…

【Git版本控制器】:第一弹——Git初识,Git安装,创建本地仓库,初始化本地仓库,配置config用户名,邮箱信息

🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 ​ 相关笔记: https://blog.csdn.net/dj…

双轴伺服电机驱动控制器AGV、AMR专用双伺服电机驱动控制器解决方案

工业机器人数控机床XY机械手双轴机器人堆垛机专用双轴伺服电机驱动控制器48V 14ARMS带有STO功能,隔离高压CAN/RS485/USB通讯支持编码器和霍尔输入 双伺服电机驱动控制器TMCM2611功能介绍 集成2个伺服电机的控制和驱动于一体供电电压48V,驱动电流14A RM…

flutter本地推送 flutter_local_notifications的使用记录

flutter_local_notifications 效果 安卓配置(AndroidManifest.xml) <uses-permission android:name"com.android.alarm.permission.SET_ALARM"/> <uses-permission android:name"android.permission.SCHEDULE_EXACT_ALARM" /> <us…

宝塔和docker的区别

宝塔面板 vs Docker&#xff1a;区别、场景与互补使用指南 eepseek回答宝塔和docker的区别 好的&#xff0c;我现在需要回答用户关于宝塔面板和Docker之间的区别的问题。首先&#xff0c;我需要明确这两个工具各自的定义、功能以及它们适用的场景&#xff0c;这样才能准确比较…

【算法专场】哈希表

目录 前言 哈希表 1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; 算法分析 算法代码 面试题 01.02. 判定是否互为字符重排 ​编辑算法分析 算法代码 217. 存在重复元素 算法分析 算法代码 219. 存在重复元素 II 算法分析 算法代码 解法二 算法代码 算法…

PHP本地商家卡券管理系统

本地商家卡券管理系统 —— 引领智慧消费新时代 本地商家卡券管理系统&#xff0c;是基于ThinkPHPUni-appuView尖端技术匠心打造的一款微信小程序&#xff0c;它彻底颠覆了传统优惠方式&#xff0c;开创了多商家联合发行优惠卡、折扣券的全新模式&#xff0c;发卡类型灵活多变…

Kafka分区管理大师指南:扩容、均衡、迁移与限流全解析

#作者&#xff1a;孙德新 文章目录 分区分配操作(kafka-reassign-partitions.sh)1.1 分区扩容、数据均衡、迁移(kafka-reassign-partitions.sh)1.2、修改topic分区partition的副本数&#xff08;扩缩容副本&#xff09;1.3、Partition Reassign场景限流1.4、节点内副本移动到不…

极狐GitLab 17.8 正式发布,多项 DevOps 重点功能解读【二】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

AWTK-WEB 快速入门(4) - JS Http 应用程序

XMLHttpRequest 改变了 Web 应用程序与服务器交换数据的方式&#xff0c;fetch 是 XMLHttpRequest 继任者&#xff0c;具有更简洁的语法和更好的 Promise 集成。本文介绍一下如何使用 JS 语言开发 AWTK-WEB 应用程序&#xff0c;并用 fetch 访问远程数据。 用 AWTK Designer 新…

LabVIEW外腔二极管激光器稳频实验

本项目利用LabVIEW软件开发了一个用于外腔二极管激光器稳频实验的系统。系统能够实现激光器频率的稳定控制和实时监测&#xff0c;为激光实验提供了重要支持。 项目背景&#xff1a; 系统解决了外腔二极管激光器频率不稳定的问题&#xff0c;以满足对激光器频率稳定性要求较高…

计算机毕业设计--基于深度学习技术(Yolov11、v8、v7、v5)算法的高效人脸检测模型设计与实现(含Github代码+Web端在线体验界面)

基于深度学习技术&#xff08;Yolov11、v8、v7、v5&#xff09;算法的高效人脸检测模型 Yolo算法应用之《基于Yolo的花卉识别算法模型设计》&#xff0c;请参考这篇CSDN作品&#x1f447; 计算机毕业设计–基于深度学习技术&#xff08;Yolov11、v8、v7、v5&#xff09;算法的…

国家队出手!DeepSeek上线国家超算互联网平台!

目前,国家超算互联网平台已推出 DeepSeek – R1 模型的 1.5B、7B、8B、14B 版本,后续还会在近期更新 32B、70B 等版本。 DeepSeek太火爆了!在这个春节档,直接成了全民热议的话题。 DeepSeek也毫无悬念地干到了全球增速最快的AI应用。这几天,国内的云计算厂家都在支持Dee…

Android和DLT日志系统

1 Linux Android日志系统 1.1 内核logger机制 drivers/staging/android/logger.c static size_t logger_offset( struct logger_log *log, size_t n) { return n & (log->size - 1); } 写的off存在logger_log中&#xff08;即内核内存buffer&#xff09;&am…

安卓手游内存call综合工具/内部call/安卓注入call/数据分析(类人猿学院)

进程分析注入综合工具总界面 模块分析函数分析遍历 函数分析 so汇编分析 汇编call植入器&#xff0c;支持模拟器x86 x64 和手机arm64指令全平台 防ce搜索数据功能 全国首套发布&#xff0c;阿凡老师学院最好的安卓内存逆向老师&#xff0c;几乎行业最强的&#xff0c;有兴趣可以…

Kotlin 扩展

Kotlin 扩展 引言 Kotlin 作为一种现代编程语言,以其简洁、安全、互操作性强等特点,在 Android 开发领域占据了重要地位。其中,Kotlin 扩展(Extensions)是其一项非常实用的特性,它允许开发者以简洁的方式对类、对象或属性进行扩展。本文将详细介绍 Kotlin 扩展的概念、…

通过例子学 rust 个人精简版 1-1

1-1 Hello World fn main() {println!("Hello World!");// 动手试一试println!("Im a Rustacean!"); }Hello World! Im a Rustacean!要点1 &#xff1a;println 自带换行符 注释 fn main() {let x 5 /* 90 */ 5;println!("Is x 10 or 100? x …

ML.NET库学习007:从SQL数据库中流式读取数据并进行预测分析

文章目录 ML.NET库学习007:从SQL数据库中流式读取数据并进行预测分析项目主要目的和原理项目概述实现的主要功能主要流程步骤使用的主要函数方法关键技术主要功能和步骤功能详细解读实现步骤分步骤代码结构及语法解读使用机器学习进行特征工程:从类别到数值的转换与文本特征提…