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

相关推荐
好吃的肘子40 分钟前
ElasticSearch入门详解
java·大数据·elasticsearch·搜索引擎·云原生
极小狐6 小时前
如何从极狐GitLab 容器镜像库中删除容器镜像?
java·linux·开发语言·数据库·python·elasticsearch·gitlab
A-花开堪折19 小时前
RK3568-OpenHarmony(1) : OpenHarmony 5.1的编译
大数据·elasticsearch·搜索引擎
斯普信专业组1 天前
Elasticsearch内存管理与JVM优化:原理剖析与最佳实践
大数据·jvm·elasticsearch
SelectDB技术团队1 天前
可观测性方案怎么选?SelectDB vs Elasticsearch vs ClickHouse
大数据·数据仓库·clickhouse·elasticsearch·信息可视化·doris·半结构化
斯普信云原生组2 天前
Elasticsearch知识汇总之ElasticSearch部署
大数据·elasticsearch·jenkins
老友@2 天前
MySQL 与 Elasticsearch 数据一致性方案
数据库·mysql·elasticsearch·搜索引擎·同步·数据一致性
斯普信云原生组2 天前
Elasticsearch知识汇总之ElasticSearch与OpenSearch比较
大数据·elasticsearch·搜索引擎
老友@2 天前
MySQL + Elasticsearch:为什么要使用ES,使用场景与架构设计详解
数据库·mysql·elasticsearch·搜索引擎·性能优化·系统架构
星宸追风3 天前
Git查看某个commit的改动
大数据·elasticsearch·搜索引擎