【Elasticsearch】parent aggregation

在Elasticsearch中,`Parent Aggregation`是一种特殊的单桶聚合,用于选择具有指定类型的父文档,这些类型是通过一个`join`字段定义的。以下是关于`Parent Aggregation`的详细介绍:

1.基本概念

`Parent Aggregation`是一种聚合操作,主要用于处理父-子关系的文档。通过这种聚合,可以将子文档的聚合结果映射到父文档上,从而实现跨文档类型的聚合。

2.应用场景

假设有一个索引,其中包含问题(`question`)和答案(`answer`)两种类型的文档。`answer`文档通过`join`字段与`question`文档关联。通过`Parent Aggregation`,可以将答案的聚合结果(如答案的数量、答案的作者等)映射到问题文档上。

3.配置方法

在使用`Parent Aggregation`时,需要指定以下内容:

• `type`:指定子文档的类型。例如,在问题和答案的场景中,`type`应设置为`answer`。

• 子聚合:可以在`Parent Aggregation`中嵌套其他聚合操作,例如`terms`、`avg`等。

4.示例

以下是一个具体的例子,展示如何使用`Parent Aggregation`将答案的作者聚合到问题的标签上:

索引映射

```json

PUT parent_example

{

"mappings": {

"properties": {

"join": {

"type": "join",

"relations": {

"question": "answer"

}

}

}

}

}

```

索引文档

```json

PUT parent_example/_doc/1

{

"join": {

"name": "question"

},

"body": "I have Windows 2003 server and i bought a new Windows 2008 server...",

"title": "Whats the best way to file transfer my site from server to a newer one?",

"tags": [

"windows-server-2003",

"windows-server-2008",

"file-transfer"

]

}

PUT parent_example/_doc/2?routing=1

{

"join": {

"name": "answer",

"parent": "1"

},

"owner": {

"location": "Norfolk, United Kingdom",

"display_name": "Sam",

"id": 48

},

"body": "Unfortunately you're pretty much limited to FTP...",

"creation_date": "2009-05-04T13:45:37.030"

}

```

查询

```json

POST parent_example/_search?size=0

{

"aggs": {

"top-names": {

"terms": {

"field": "owner.display_name.keyword",

"size": 10

},

"aggs": {

"to-questions": {

"parent": {

"type": "answer"

},

"aggs": {

"top-tags": {

"terms": {

"field": "tags.keyword",

"size": 10

}

}

}

}

}

}

}

}

```

响应

```json

{

"aggregations": {

"top-names": {

"buckets": [

{

"key": "Sam",

"doc_count": 1,

"to-questions": {

"doc_count": 1,

"top-tags": {

"buckets": [

{

"key": "file-transfer",

"doc_count": 1

},

{

"key": "windows-server-2003",

"doc_count": 1

},

{

"key": "windows-server-2008",

"doc_count": 1

}

]

}

}

}

]

}

}

}

```

5.注意事项

• `Parent Aggregation`依赖于`join`字段来定义父-子关系。

• 子聚合可以是任意类型的聚合操作,但必须与父文档的类型兼容。

通过`Parent Aggregation`,可以有效地将子文档的聚合结果映射到父文档上,从而实现复杂的跨文档类型的聚合操作。

相关推荐
追巨1 小时前
单节点elasticsearch安装笔记
大数据·elasticsearch·jenkins
鱼锦0.01 小时前
Coreseek和Elasticsearch 有什么区别
大数据·elasticsearch·jenkins
不做无法实现的梦~2 小时前
Git Clone 使用 Watt/Steam++ 加速时报证书错误的原因与解决方法
大数据·git·elasticsearch
逸Y 仙X3 小时前
文章七:ElasticSearch 集群监控指标
大数据·elasticsearch·搜索引擎
chushiyunen3 小时前
elasticsearch笔记
笔记·elasticsearch·jenkins
chushiyunen4 小时前
elasticsearch内置接口笔记
大数据·笔记·elasticsearch
Elastic 中国社区官方博客4 小时前
Hacknight Beijing:基于阿里云与 Elastic 构建 AI Agents
大数据·运维·人工智能·elasticsearch·搜索引擎·阿里云·云计算
liushangzaibeijing19 小时前
Superpower 使用大纲
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客20 小时前
每次操作一个 API 调用:Elastic Cloud Hosted 如何让大规模部署管理变得可行
大数据·运维·数据库·elasticsearch·搜索引擎·serverless