【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`,可以有效地将子文档的聚合结果映射到父文档上,从而实现复杂的跨文档类型的聚合操作。

相关推荐
Sayai21 分钟前
Elasticsearch 9 安装验证实战:start-local 一键部署 + Docker 手动安装踩坑指南
大数据·elasticsearch·docker
瑞码空间9 小时前
git知识点黄金笔记
笔记·git·elasticsearch
切糕师学AI12 小时前
如何查看已合并到 master 分支的所有分支?Git 分支清理指南
大数据·git·elasticsearch
suaizai_13 小时前
从1210条报错到全自动修复:AI闭环运维实战
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客17 小时前
不再有分配延迟:在无状态 Elasticsearch 中将快照与分片迁移解耦
大数据·运维·人工智能·elasticsearch·搜索引擎·全文检索
Elasticsearch20 小时前
在 ES|QL 中引入 SPARKLINE:一眼看清趋势
elasticsearch
Capricorn19882 天前
防编造架构实战:对比 Gemini Notebook 解析知芽 Notebook Skill 的工程实现
人工智能·笔记·elasticsearch·架构·知识图谱·论文笔记
玉&心2 天前
在Kibana查看Elasticsearch中的日志或存储的文档数据
elasticsearch·kibana
Elastic 中国社区官方博客2 天前
安装 Elasticsearch
大数据·数据库·elasticsearch·搜索引擎·全文检索