栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Elasticsearch嵌套字段与深度?通过Kibana检查文档深度?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Elasticsearch嵌套字段与深度?通过Kibana检查文档深度?

造成混淆的原因可能是因为Elasticsearch术语

nested
可以在两种不同的上下文中使用:

  • “嵌套”为嵌套的常规JSON表示法,即JSON对象中的JSON对象;
  • “嵌套”为Elasticsearch
    nested
    数据类型。

在映射文档页面中,当提及“深度”时,它们指的是第一个含义。这里的设置

index.mapping.depth.limit
定义了JSON文档可以嵌套的深度。

Elasticsearch映射如何解释JSON深度?

这是深度为1的JSON文档的示例:

 {    "name": "John",    "age": 30 }

现在深度2:

 {    "name": "John",    "age": 30,    "cars": {        "car1": "Ford",        "car2": "BMW",        "car3": "Fiat"    } }

默认情况下(从ES
6.3开始),深度不能超过20。

什么是
nested
数据类型?为什么它与深度> 1的文档不同?

nested
数据类型允许索引对象数组并通过
nested
query分别查询其项目。这意味着Elasticsearch将以不同的方式对具有此类字段的文档编制索引(有关更多说明,请参见《权威指南》的“
嵌套对象 ”页面)。

例如,如果在下面的例子中,我们没有定义

"user"
nested
在映射字段,查询
user.first: John
user.last:White
返回匹配,这将是一个错误:

{  "group" : "fans",  "user" : [     {      "first" : "John",      "last" :  "Smith"    },    {      "first" : "Alice",      "last" :  "White"    }  ]}

如果这样做,Elasticsearch将把

"user"
列表的每个项目作为隐式子文档建立索引,从而将使用更多的资源,更多的磁盘和内存。这就是为什么在映射上还有另一个设置的原因:
index.mapping.nested_fields.limit
调节
nested
一个人可以声明多少个不同的字段(默认为
50
)。

因此,深度> 1的Elasticsearch文档不会被索引,

nested
除非您明确要求这样做,否则就是如此。

我可以
nested
在里面填写字段
nested
吗?

是的你可以!只是为了消除这种混乱,是的,您可以在映射中的

nested
field内部定义一个field
nested
。它看起来像这样:

PUT my_index{  "mappings": {    "_doc": {      "properties": {        "user": {          "type": "nested",          "properties": { "name": {   "type": "keyword" }, "cars": {   "type": "nested",   "properties": {     "brand": {       "type": "keyword"     }   } }          }        }      }    }  }}

但是请记住,要建立索引的隐式文档的数量将成倍增加,并且效率不高。

我可以从Kibana获取JSON对象的深度吗?

您很有可能可以使用脚本来完成此操作,请查看此博客文章以获取更多详细信息:在Kibana脚本字段中使用Painless。

希望有帮助!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415539.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号