默认情况下,对象中的每个子字段都需要分别进行映射和索引。如果事先不知道子字段的名称或类型,则将动态映射它们。

flattened 数据类型提供了一种替代方法,其中将整个对象映射为单个字段。对于给定的对象,flatten 类型映射将解析出其 leaf 值并将它们作为关键字索引到一个字段中。然后可以通过简单的查询和汇总来搜索对象的内容。

此数据类型对于索引具有大量或未知数量的唯一键的对象很有用。仅为整个 JSON 对象创建一个字段映射,这可以帮助防止由于大量不同的字段映射而导致映射爆炸。

另一方面,flatten 的对象字段在搜索功能方面存在折衷。仅允许基本查询,不支持数字范围查询或突出显示(highlighting)。

在使用 flattened 数据类型时,必须注意的是:

flattened 的映射类型不应用于索引所有文档内容,因为它将所有值都视为关键字,并且不提供完整的搜索功能。 在大多数情况下,默认方法(每个子字段在映射中都有其自己相对应的项)有效。

下面我们来用一个例子来展示如何使用 flattened 数据类型的用法。我们首先来创建一个叫做 bug_reports 的索引及它的 mapping:

PUT bug_reports
{"mappings": {"properties": {"title": {"type": "text"},"labels": {"type": "flattened"}}}
}

在上面,我们定义 labels 的数据类型为 flattened,意味着这个字段可以用来保持一个对象。我们用一下的方法来创建一个文档:

POST bug_reports/_doc/1
{"title": "Results are not sorted correctly.","labels": {"priority": "urgent","release": ["v1.2.5","v1.3.0"],"timestamp": {"created": 1541458026,"closed": 1541457010}}
}

在上面我们可以看出来: labels 是一个对象,它包含 priority, release 及 timestamp leaf 项。在建立索引的时候,Elasticsearch 为 JSON 对象的每一个 leaf 建立 token,这些值被索引为字符串关键字,无需对数字或日期进行特殊处理。针对我们的情况,Elasticsearch 在建立索引时,会对 urgent,v1.2.5, v1.3.0, 1541458026 及1541457010 建立 token, 并供我们进行搜索。

我们可以通过如下的方式来进行查询:

POST bug_reports/_search
{"query": {"term": {"labels": "urgent"}}
}

查询的结果是:

  "hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : 0.42763555,"hits" : [{"_index" : "bug_reports","_type" : "_doc","_id" : "1","_score" : 0.42763555,"_source" : {"title" : "Results are not sorted correctly.","labels" : {"priority" : "urgent","release" : ["v1.2.5","v1.3.0"],"timestamp" : {"created" : 1541458026,"closed" : 1541457010}}}}]}

同样,我们可以对数值进行查询:

POST bug_reports/_search
{"query": {"term": {"labels": 1541458026}}
}

返回结果:

  "hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : 0.42763555,"hits" : [{"_index" : "bug_reports","_type" : "_doc","_id" : "1","_score" : 0.42763555,"_source" : {"title" : "Results are not sorted correctly.","labels" : {"priority" : "urgent","release" : ["v1.2.5","v1.3.0"],"timestamp" : {"created" : 1541458026,"closed" : 1541457010}}}}]}

要查询 flattened 对象中的特定键,请使用 “." 来表示:

POST bug_reports/_search
{"query": {"term": {"labels.release": "v1.3.0"}}
}

返回结果:

  "hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : 0.42763555,"hits" : [{"_index" : "bug_reports","_type" : "_doc","_id" : "1","_score" : 0.42763555,"_source" : {"title" : "Results are not sorted correctly.","labels" : {"priority" : "urgent","release" : ["v1.2.5","v1.3.0"],"timestamp" : {"created" : 1541458026,"closed" : 1541457010}}}}]}

支持的操作

由于索引值的方式相似,flattened 字段与 keyword 字段共享许多相同的映射和搜索功能,这是因为它们在建立索引时的方式非常相似。

目前,flattened的对象字段可以与以下查询类型一起使用:

  • termterms, and terms_set
  • prefix
  • range
  • match and multi_match
  • query_string and simple_query_string
  • exists

查询时,不可能使用通配符来引用字段关键字,例如 {“ term”:{“ labels.time *”:1541457010}}。 请注意,所有查询(包括范围)都将值视为字符串关键字。 拼合的字段不支持突出显示(highlighting)。

可以对 flattened 的对象字段进行排序,以及执行简单的关键字样式聚合(例如terms aggregation)。 与查询一样,对数字没有特殊支持-将 JSON 对象中的所有值都视为关键字。 排序时,这意味着按字典顺序对值进行比较。

展平的对象字段当前无法存储。 无法在映射中指定 store 参数。

参考:

【1】Flattened field type | Elasticsearch Guide [master] | Elastic

Elasticsearch:flattened 数据类型 (7.3 发行版新功能)相关推荐

  1. win10正式版新功能介绍

    win10正式版新功能 一:拨动.滑动及缩放 在win10系统中拥有完整触控功能呢祝您尽情发挥电脑潜力,自然.直接的受控操作方式让您尽享快意流畅的运作步调. 二:网络世界.无所不在 在win10系统中 ...

  2. it之家鸿蒙手机系统,IT之家安卓版新功能!支持识别鸿蒙系统与鸿蒙应用,无需更新...

    原标题:IT之家安卓版新功能!支持识别鸿蒙系统与鸿蒙应用,无需更新 IT之家 6 月 2 日消息 今日晚间,HarmonyOS 2 操作系统及华为全场景新品发布会召开.届时,可以覆盖手机等移动终端的 ...

  3. mymps蚂蚁分类系统 5.8 E UTF8 完全解密版 新功能详细介绍

    mymps 蚂蚁分类信息是一款基于php+mysql的建站系统,为在各种服务器上架设分类信息以及地方门户网站提供完美的解决方案. 目前官方最新版本为5.8 网上有很多5.8之前版本的开源版本.本人以前 ...

  4. NetAlly Aircheck G2 WIFI测试仪新版 5.2 版新功能介绍

    NetAlly Aircheck G2 WIFI测试仪新版 5.2 版新功能介绍,此版本的重点是增强和改进NETALLY AirCheck G2 (原NETSCOUT测试仪)的现有功能,如需最新固件, ...

  5. Win10 20H2正式发布,对比旧版新功能一览

    微软在其官方网站发布了最新的Windows 10 20H2版(10月更新),根据微软的更新规则,春季版一般包含更多新功能,而秋季版更倾向于Bug修复,因此很多人对于20H2的期待程度并不高.但事实上, ...

  6. 划重点!Android 11 首个开发者预览版新功能抢先看

    5G支持引领了Google移动操作系统面向开发人员的新功能.Android 11中为应用程序开发人员提供了许多新工具,但我们必须等到今年晚些时候才能看到面向用户的变化. -- Michael Much ...

  7. 会声会影2023专业旗舰版新功能介绍

    会声会影(Corel VideoStudio)2023为加拿大Corel公司发布的一款功能丰富的视频编辑软件.会声会影2023简单易用,具有史无前例的强大功能,拖放式标题.转场.覆叠和滤镜,色彩分级. ...

  8. 美图秀秀网页版新功能上线 新增磨皮祛痘

    在人物照片的后期处理中,磨皮祛痘向来是一个比较重要的环节,特别是人像自拍.写真照等.不过,别以为这是件多么难做的事儿,因为美图秀秀网页版新上线了"磨皮祛痘"功能,也就是说以后不用东 ...

  9. 最新ACR15.0新功能如何使用?ps插件camera raw15.0mac版新功能教程

    更新了Camera Raw15.0版本,它最大的重要性在于:对蒙版功能进行了重大升级,局部的精细化调整更加精准,指哪打哪,想调哪里就调哪里,使蒙版成为局部精细化调整的超级利器!而这一切,都是在ACR里 ...

最新文章

  1. Centos版Linux 一些常用操作命令
  2. 跨境电商未来应该怎么走?
  3. Android Studio一直Download fastutil-x.x.x.jar
  4. 360笔试第一题----最强的不一定是最后的赢家
  5. Apollo配置发布原理
  6. ./ 表示当前路径 ../ 表示上一级目录路径
  7. oracle crontab e,Linux运维知识之通过crontab -e编辑生成的定时任务,写在哪个文件中...
  8. 如何使用ArchUnit测试Java项目的体系结构
  9. 看了5种分布式事务方案,最终选择了Seata,真香!
  10. 树视图主要属性 c# 0207
  11. 非常漂亮滴皮肤skin++ 终极破解之法
  12. js的异常处理 try catch
  13. springboot开篇 (一)简单邮件发送
  14. 详解java的构造方法
  15. 计算机无法获取正常的ip地址,教你轻松解决Win7系统经常获取不到IP地址问题
  16. 人工智能和溯因推理 AI的历史一直被演绎和归纳所主导
  17. ps怎么对比原图快捷键_PS图片调色常用快捷键,专为新手整理
  18. 一文说清:可逆与不可逆加密算法,对称与非对称加密算法-据说BCrypt比MD5要好?
  19. 微信开发者工具配置服务器信息,微信开发者中心如何配置
  20. c罗说什么语言,那些年属于C罗的经典语录,那一句话最感动你?

热门文章

  1. (11)Are you a giver or a taker?
  2. matlab大作业,MATLAB大作业华中科技大学.doc
  3. 软件成本估算之快速功能点方法应用示例
  4. 洛谷P2375 [NOI2014] 动物园 题解
  5. C#,核心基础算法——文件处理的基础功能,文本文件与文本流编码问题的终极解决方案之源程序
  6. html5悬停,html5hover
  7. 使用XPath查询带有命名空间(有xmlns)的XML
  8. csdn markdown写博客技巧
  9. 矩阵分解之特征值分解(EVD)、奇异值分解(SVD)、SVD++
  10. 智能安全配电装置伙房食堂中的应用