java+es+nested_Elasticsearch嵌套式对象Nested

本文详细介绍了Elasticsearch中如何使用nested类型处理嵌套对象,包括创建映射、批量插入数据、聚合分析以及Java查询。通过nested类型,可以保持对象间的关联,解决搜寻时的误匹配问题,提高查询效率。
摘要由CSDN通过智能技术生成

参考:

嵌套对象

事实上在Elasticsearch中,创建丶删除丶修改一个文档是是原子性的,因此我们可以在一个文档中储存密切关联的实体。

举例来说,我们可以在一个文档中储存一笔订单及其所有内容,或是储存一个Blog文章及其所有回应,藉由传递一个comments阵列:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

PUT /my_index/blogpost/1{"title": "Nest eggs",

"body": "Making your money work...",

"tags": [

"cash",

"shares"

],"comments": [

{"name": "John Smith",

"comment": "Great article",

"age": 28,

"stars": 4,

"date": "2014-09-01"

},

{"name": "Alice White",

"comment": "More like this please",

"age": 31,

"stars": 5,

"date": "2014-10-22"

}

]

}

View Code

<1> 如果我们依靠动态映射,comments栏位会被自动建立为一个object栏位。

因为所有内容都在同一个文档中,使搜寻时并不需要连接(join)blog文章与回应,因此搜寻表现更加优异。

问题在於以上的文档可能会如下所示的匹配一个搜寻:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

GET my_index/_search

{"query": {

"bool": {

"must": [

{"match": {

"comments.age": 31

}

},

{"match": {

"comments.name": "John Smith"

}

}

]

}

}

}

View Code

Alice是31岁,而不是28岁!

造成跨对象配对的原因如同我们在对象阵列中所讨论到,在于我们优美结构的JSON文档在索引中被扁平化为下方的 键-值 形式:

8f900a89c6347c561fdf2122f13be562.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值