以下内容摘录转载自:Elasticsearch Nested类型深入详解
Nested类型的作用?
nested类型是对象数据类型的专用版本,它允许对象数组以可以彼此独立查询的方式进行索引。
Nested类型的适用场景
Nested类型的增、删、改、查、聚合操作详解
还是以第2节的blog_new索引示例,Nested类型的增、删、改、查操作。
Nested类型——增
新增blog和评论
POST blog_new/blog/2
{
"title": "Hero",
"body": "Hero test body...",
"tags": ["Heros", "happy"],
"published_on": "6 Oct 2018",
"comments": [
{
"name": "steve",
"age": 24,
"rating": 18,
"comment": "Nice article..",
"commented_on": "3 Nov 2018"
}
]
}
5.2 Nested类型——删
序号为1的评论原来有三条,现在删除John的评论数据,删除后评论数为2条。
POST blog_new/blog/1/_update
{
"script": {
"lang": "painless",
"source": "ctx._source.comments.removeIf(it -> it.name == 'John');"
}
}
Nested类型——改
将steve评论内容中的age值调整为25,同时调整了评论内容。
POST blog_new/blog/2/_update
{
"script": {
"source": "for(e in ctx._source.comments){if (e.name == 'steve') {e.age = 25; e.comment= 'very very good article...';}}"
}
}
Nested类型——查
如前所述,查询评论字段中评论姓名=William并且评论age=34的blog信息。
POST /blog_new/_search?pretty
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "comments",
"query": {
"bool": {
"must": [
{
"match": {
"comments.name": "William"
}
},
{
"match": {
"comments.age": 34
}
}
]
}
}
}
}
]
}
}
}
5.5 Nested类型——聚合
认知前提:nested聚合隶属于聚合分类中的Bucket聚合分类。
聚合blog_new 中评论者年龄最小的值。
POST blog_new/_search
{
"size": 0,
"aggs": {
"comm_aggs": {
"nested": {
"path": "comments"
},
"aggs": {
"min_age": {
"min": {
"field": "comments.age"
}
}
}
}
}
}
小结
如果您在索引中使用内部对象并做查询操作,请验证内部对象的类型是否为nested类型。 否则查询可能会返回无效的结果文档。
更新认知是非常痛苦的,不确定的问题只有亲手实践才能检验真知。
如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。
如本文对您有用,捐赠和留言 将是对我最好的支持~(捐赠可转为站内积分)
如愿意,请向朋友推荐本站,谢谢。
尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。