Elasticsearch:ES|QL 查询中的元数据字段及多值字段

在今天的文章里,我来介绍一下 ES|QL 里的元数据字段以及多值字段。我们可以利用这些元数据字段以及多值字段来针对我们的查询进行定制。

ES|QL 源数据字段

ES|QL 可以访问元数据字段。 目前支持的有:

  • _index:文档所属的索引名称。 该字段的类型为关键字。
  • _id:源文档的 ID。 该字段的类型为关键字。
  • _version:源文档的版本。 该字段的类型为 long。

要启用对这些字段的访问,需要为 FROM source 命令提供专用指令:

FROM index [METADATA _index, _id]

仅当数据源是索引时元数据字段才可用。 因此,FROM 是唯一支持 METADATA 指令的源命令。比如,

POST _query?format=txt
{"query": """FROM sample_data [METADATA _index, _id]| LIMIT 3"""
}

从上面的返回数据中,我们可以看到 _index 及 _id 返回索引名称 sample_data 及文档的 ID。

POST _query?format=txt
{"query": """FROM sample_data [METADATA _index, _id,  _version]| LIMIT 3| WHERE _version == 1| EVAL key = CONCAT(_index, "_ ", _id)| KEEP _index, _version, _id, key"""
}

此外,与索引字段类似,一旦执行聚合,后续命令将无法再访问元数据字段,除非用作分组字段:

POST _query?format=txt
{"query": """FROM sample_data [METADATA _index, _id]| STATS max= MAX(event.duration) BY _index"""
}

ES|QL 多值字段

ES|QL 可以很好地读取多值字段。多值字段也就是在一个字段里有多个值。通常是以数组的形式出现。

POST /mv/_bulk?refresh
{"index":{}}
{"a":1,"b":[2,1]}
{"index":{}}
{"a":2,"b":3}

多值字段以 txt 数组的形式返回:

POST /_query
{"query": "FROM mv | LIMIT 2"
}

多值字段中值的相对顺序未定义。 它们通常会按升序排列,但不要依赖于此。

重复值

某些字段类型(例如关键字)在写入时删除重复值:

DELETE mv
PUT /mv
{"mappings": {"properties": {"b": {"type": "keyword"}}}
}
POST /mv/_bulk?refresh
{"index":{}}
{"a":1,"b":["foo","foo","bar"]}
{"index":{}}
{"a":2,"b":["bar","bar"]}
POST /_query?format=txt
{"query": "FROM mv | LIMIT 2"
}

在 ES|QL 查询结果里,我们看到了该删除。

但其他类型(例如 long)不会删除重复项。

DELETE mv
PUT /mv
{"mappings": {"properties": {"b": {"type": "long"}}}
}
POST /mv/_bulk?refresh
{"index":{}}
{"a":1,"b":[2,2,1]}
{"index":{}}
{"a":2,"b":[1,1]}
POST /_query?format=txt
{"query": "FROM mv | LIMIT 2"
}

这都是在存储层。 如果你存储重复的“long”,然后将它们转换为字符串,则重复项将保留:

DELETE mv
PUT /mv
{"mappings": {"properties": {"b": {"type": "long"}}}
}
POST /mv/_bulk?refresh
{"index":{}}
{"a":1,"b":[2,2,1]}
{"index":{}}
{"a":2,"b":[1,1]}
POST /_query?format=txt
{"query": "FROM mv | EVAL b=TO_STRING(b) | LIMIT 2"
}

函数

除非另有说明,函数在应用于多值字段时将返回 null。 此行为可能会在更高版本中改变。

DELETE mv
POST /mv/_bulk?refresh
{"index":{}}
{"a":1,"b":[2,1]}
{"index":{}}
{"a":2,"b":3}
POST /_query?format=txt
{"query": "FROM mv | EVAL b + 2, a + b | LIMIT 4"
}

通过使用以下之一将字段转换为单个值来解决此限制:

  • MV_AVG
  • MV_CONCAT
  • MV_COUNT
  • MV_MAX
  • MV_MEDIAN
  • MV_MIN
  • MV_SUM
POST /_query?format=txt
{"query": "FROM mv | EVAL b=MV_MIN(b) | EVAL b + 2, a + b | LIMIT 4"
}

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

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

相关文章

vue2项目从0搭建(三):配置环境变量及对应的webpack配置

前言 实际业务开发中,一个项目很可能会同时配置好几套环境。 比如:常规开发环境,开发测试环境,正式的测试环境,预发测试环境,客户甲的生产环境,客户乙的生产环境,通用生产环境,独立应用环境,微前端环境,大屏专用环境,移动端环境。 一女多嫁的实际业务场景,就需要我们进行多样…

Android 提示框代码 java语言

在Android中,你可以使用 AlertDialog 类来创建提示框。以下是一个简单的Java代码示例,演示如何创建和显示一个基本的提示框: import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; im…

RocketMq架构和源码解析

NameServer:作为注册中心,提供路由注册、路由踢出、路由发现功能,舍弃强一致,保证高可用,集群中各个节点不会实时通讯,其中一个节点下线之后,会提供另外一个节点保证路由功能。 Broker&#xf…

vatee万腾的科技征途:Vatee独特探索的数字化力量

在数字化时代的浪潮中,Vatee万腾以其独特的科技征途成为引领者。公司在数字化领域的探索之路不仅是技术的创新,更是一种对未知的勇敢涉足,是对新时代的深刻洞察和积极实践。 Vatee万腾通过独特的探索,展示了在数字化征途上的创新力…

Matplotlib子图的创建_Python数据分析与可视化

Matplotlib子图的创建 plt.axes创建子图fig.add_axes()创建子图 plt.axes创建子图 前面已经介绍过plt.axes函数,这个函数默认配置是创建一个标准的坐标轴,填满整张图。 它还有一个可选的参数,由图形坐标系统的四个值构成。这四个值表示为坐…

Spine深入学习 —— 数据

atlas数据的处理 作用 图集,描述了spine使用的图片信息。 结构 page 页块 页块包含了页图像名称, 以及加载和渲染图像的相关信息。 page1.pngsize: 640, 480format: RGBA8888filter: Linear, Linearrepeat: nonepma: truename: 首行为该页中的图像名称. 图片位…

Python武器库开发-前端篇之CSS盒模型(三十一)

前端篇之CSS盒模型(三十一) CSS盒模型是指网页中的每个元素可以看做是一个矩形盒子,该盒子有四个主要部分组成:content、padding、border和margin。其中: content:指盒子中的内容区域,可以包含文本、图像、视频、其他…

RedLock底层源码分析

RedLock底层源码分析 一、Redlock红锁算法 https://redis.io/docs/manual/patterns/distributed-locks/官网说明 1、为什么要学习这个?怎么产生的? ​ 一个很直接的问题,当我使用redis锁的那台机器挂了,出现了单点故障了&#…

游戏开发引擎Cocos Creator和Unity如何对接广告-AdSet聚合广告平台

在游戏开发方面,游戏引擎的选择对开发过程和最终的产品质量有着重大的影响,Unity和Cocos是目前全球两大商用、通用交互内容开发工具,这两款引擎受到广泛关注,本文将从多个维度对两者进行比较,为开发者提供正确的选择建…

84基于matlab的数字图像处理

基于matlab的数字图像处理,数据可更换自己的,程序已调通,可直接运行。 84matlab数字图像处理图像增强 (xiaohongshu.com)https://www.xiaohongshu.com/explore/656219d80000000032034dea

二进制数据转换成十六进制表示 binascii.hexlify()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 二进制数据转换成十六进制表示 binascii.hexlify() 选择题 binascii.hexlify()参数的数据类型可以是? import binascii number 11 byte_data number.to_bytes() hex_data bin…

Day45:300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

文章目录 300.最长递增子序列思路代码实现 674. 最长连续递增序列思路代码实现 718. 最长重复子数组思路代码实现 300.最长递增子序列 题目链接 思路 单个字符都是一个长为1的子序列,直接初始化dp为1。先固定一个元素位置i,判断0-i范围内到i的最长子序…

数字图像处理-Matlab实验

实验一 图像增强 实验内容: 对于给定的低对比度测试图像,利用灰度图像直方图均衡化算法进行图像视觉效果增强。 对于给定的低照度彩色测试图像,结合颜色空间转换和灰度图像直方图均衡化算法进行图像视觉效果增强。 实验数据: Test1_1.jpg: Test1_2.jpg: 实验步骤: %% …

Linux加强篇006-存储结构与管理硬盘

目录 前言 1. 从“/”开始 2. 物理设备命名规则 3. 文件系统与数据资料 4. 挂载硬件设备 5. 添加硬盘设备 6. 添加交换分区 7. 磁盘容量配额 8. VDO虚拟数据优化 9. 软硬方式链接 前言 悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非…

C#,《小白学程序》第二十四课:大数的阶乘(BigInteger Factorial)算法与源程序

1 文本格式 /// <summary> /// 《小白学程序》第二十四课&#xff1a;大数&#xff08;BigInteger&#xff09;的阶乘 /// 用于大数的阶乘算法&#xff08;原始算法&#xff09; /// </summary> /// <param name"a"></param> /// <retur…

黑马点评-Feed流的实现方案,基于推拉结合模式实现笔记推送

Feed流实现方案 我们关注了博主之后,当用户发布了动态后我们应该把这些数据推送给粉丝,关注推送也叫作Feed(投喂)流,通过无限下拉刷新获取新的信息 传统的模式内容检索: 粉丝需要主动通过搜索引擎或者是其他方式去查找想看的内容新型Feed流的效果: 系统分析用户到底想看什么,…

【UGUI】中Content Size Fitter)组件-使 UI 元素适应其内容的大小

官方文档&#xff1a;使 UI 元素适应其内容的大小 - Unity 手册 必备组件&#xff1a;Content Size Fitter 通常&#xff0c;在使用矩形变换定位 UI 元素时&#xff0c;应手动指定其位置和大小&#xff08;可选择性地包括使用父矩形变换进行拉伸的行为&#xff09;。 但是&a…

突破技术障碍:软件工程师如何应对项目中的难题?

在软件开发项目中&#xff0c;工程师常常会遇到各种技术难题。这些难题可能涉及到复杂的算法、不兼容的系统、难以预见的软件行为&#xff0c;或者其他许多方面。 以下是一些策略和方法&#xff0c;可以帮助软件工程师有效地应对这些挑战&#xff1a; 1、理解问题&#xff1a;…

count=0语句的位置

简洁一点的代码&#xff1a; 像count0这种语句要注意放好位置&#xff0c;尤其是在循环里。

SAP Smartform小结

SAP系统做打印单据用的, 感觉很不好用, 特别是要嵌入韩文时必须使用嵌入的word编辑器,运行速度简直不可忍受. 见过一些Adobe interactive form的示例, 看着相当不错, 不过据说需要花money额外买licence, 哪有smartform这种免费东西来得实惠. 一般打印需求,会要求有标题抬头,打…