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

相关推荐
Elastic 中国社区官方博客16 小时前
不到 5 分钟完成本地部署:Jina embedding 模型现已支持本地部署
大数据·人工智能·elasticsearch·搜索引擎·embedding·jina
二进制流水搬运工16 小时前
入职第一天拉了23个仓库,我写了个脚本解放双手
大数据·elasticsearch·搜索引擎
Elasticsearch17 小时前
在不到一小时内将 Datadog Kubernetes 仪表板迁移到 Elastic Observability
elasticsearch
.柒宇.18 小时前
Elasticsearch 核心概念与系统架构详解
elasticsearch·系统架构
风行無痕20 小时前
单机Elasticsearch 8.19.18安全升级到9.4.3的过程
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客21 小时前
使用重新设计的 AutoOps 更快地进行 Elasticsearch 问题排查
大数据·运维·前端·人工智能·elasticsearch·搜索引擎·全文检索
阿拉雷️1 天前
【搜索实战】Spring Boot 3.3 + AI Agent × Elasticsearch:让AI自动优化搜索策略,查询速度从2秒压到50毫秒
人工智能·spring boot·elasticsearch
阿里云大数据AI技术2 天前
阿里云 ES AI 引擎版:面向 Agent 场景,为亿级租户、千亿规模向量设计的搜索引擎
人工智能·elasticsearch·agent
阿里云大数据AI技术2 天前
FalconSeek 技术解析:阿里云 Elasticsearch 云原生内核如何让查询性能飙升600%
人工智能·elasticsearch
Elastic 中国社区官方博客2 天前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
大数据·人工智能·elasticsearch·搜索引擎·容器·kubernetes·grafana