我正在阅读有关Elasticsearch中的映射的信息,并且看到了以下两个术语:嵌套字段和深度。我认为这两个词相当。我目前对这2个内容感到困惑。请问有人可以清除我吗?谢谢。顺便说一句,有什么方法可以通过Kibana检查文档深度吗?
对不起我的英语不好。
造成混淆的原因可能是因为Elasticsearch术语nested
可以在两种不同的上下文中使用:
nested
数据类型。在映射文档页面中,当提及“深度”时,它们指的是第一个含义。这里的设置index.mapping.depth.limit
定义了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脚本字段中使用Painless。
希望有帮助!
我有一个深度嵌套的文档结构,如下所示: 我正在尝试更新集合以插入新配置,如下所示: 我正在mongo(Python)中尝试类似的内容: 但是,我得到了“如果没有包含数组的相应查询字段,则无法应用位置运算符”错误。在mongo这样做的正确方式是什么?这是mongo v2。4.1.
问题内容: 示例文档中有一个简化的文档。这对我理解非嵌套类型与嵌套类型的聚合差异很有帮助。但是,这种简化掩盖了进一步的复杂性,因此我不得不在这里扩展这个问题。 所以我的实际文件更接近以下内容: 因此,我保留了,和的关键属性,但隐藏了许多其他使情况复杂化的内容。首先,请注意,与引用的问题相比,有很多额外的嵌套:在根和“项目”之间,以及在“项目”和“ item_property_1”之间。此外,还请注
我的索引中有以下类型的文档,但由于深度嵌套方面,我找不到正确排序的方法。 文档示例: 我希望排序或提升在匹配时间,以便我可以得到排序的文档(asc/desc)与约束和内嵌套文档和内嵌套文档
我是elasticsearch的新手,对如何进行过滤器、查询和聚合有一些想法,但不确定如何解决下面的问题。我希望能够从下面显示的文档中只查询公司的最新交付(日期和crate_quantity)。我不确定如何去做。有没有办法使用最大聚合从每个文档中只提取最近的交付?
想象一下我有一个阶级家庭。它包含一个人员列表。每个(班级)人都有一个(班级)地址。每个(类)地址都包含一个(类)邮政编码。任何“中间”类都可以为空。 那么,有没有一种简单的方法可以在不必在每一步都检查null的情况下访问PostalCode?i、 例如,有没有办法避免以下菊花链代码?我知道没有“原生”Java解决方案,但我希望如果有人知道某个库或其他东西。(已选中Commons 不,不能改变结构。
在这里给ElasticSearch的初学者排名。 我有一个客户列表,他们的订单作为一个嵌套字段。假设文档结构如下: 我想查询的是:在两个日期之间订购了一定数量的用户列表。我希望能够将它与例如生日的范围查询结合起来。 我已经到了这样的地步,我可以使用聚合来获得每个订户在两个日期之间的排序总和: 但是,我想限制查询部分返回的结果,以便更好地与所有其他过滤器混合。 我的第一个想法是使用一个脚本过滤器,并