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

相关推荐
G皮T3 小时前
【Elasticsearch】自定义评分检索
大数据·elasticsearch·搜索引擎·查询·检索·自定义评分·_score
feilieren13 小时前
Docker 安装 Elasticsearch 9
运维·elasticsearch·docker·es
Java烘焙师16 小时前
架构师必备:业务扩展模式选型
mysql·elasticsearch·架构·hbase·多维度查询
G皮T1 天前
【Elasticsearch】深度分页及其替代方案
大数据·elasticsearch·搜索引擎·scroll·检索·深度分页·search_after
G皮T1 天前
【Elasticsearch】检索排序 & 分页
大数据·elasticsearch·搜索引擎·排序·分页·检索·深度分页
飞询1 天前
Docker 安装 Elasticsearch 9
elasticsearch·docker
G皮T1 天前
【Elasticsearch】检索高亮
大数据·elasticsearch·搜索引擎·全文检索·kibana·检索·高亮
大只鹅2 天前
解决 Spring Boot 对 Elasticsearch 字段没有小驼峰映射的问题
spring boot·后端·elasticsearch
HGW6892 天前
基于 Elasticsearch 实现地图点聚合
java·elasticsearch·高德地图
小袁拒绝摆烂3 天前
ElasticSearch快速入门-1
大数据·elasticsearch·搜索引擎