如何获取 ElasticSearch 聚合来计算父文档而不是嵌套文档
How can I get ElasticSearch aggregations to count the parent documents instead of the nested documents
我的 ElasticSearch 索引有嵌套的文档来指示与文档相关的各种事件发生的位置。我正在使用聚合来获取这些地方的各个方面。返回的计数是该地点出现的次数。例如,如果文档的出生和死亡地点为加利福尼亚,则加利福尼亚的聚合计数为 2。我希望聚合计数为包含特定地点的文档数,而不是包含该地点的子文档数.我的架构的相关部分如下所示:
"mappings": {
"document": {
"properties": {
"docId" : { "type": "keyword" },
"place": {
"type": "nested",
"properties": {
"id": { "type": "keyword" },
"type": { "type": "keyword" },
"loc": { "type" : "geo_point" },
"text": {
"type": "text",
"analyzer": "english",
"copy_to" : "text"
}
},
"dynamic": false
}
}
}
}
我可以通过像这样的简单聚合来获取分面,它检索类型为 place.vital.* 的地点(例如 place.vital.birth、place.vital.death 等),但计算嵌套文档的数量,而不是父文档的数量。
"aggs": {
"place.vital": {
"aggs": {
"types": {
"aggs": {
"values": {
"terms": {
"field": "place.id"
}
}
},
"terms": {
"field": "place.type",
"include": "place\.vital\..*"
}
}
},
"nested": {
"path": "place"
}
}
是否可以调整我的聚合,使其只对每个父文档计数一次?
我相信您可以使用嵌套字段来实现,但不能使用 parent child 关系。如果您正在寻找地点 为什么不搜索地点索引并按 child 过滤?
使用反向嵌套聚合。然后,这将创建一个包含嵌套计数的聚合和一个包含父计数的子聚合。
有关详细信息,请参阅 how to return the count of unique documents by using elasticsearch aggregation。
我的 ElasticSearch 索引有嵌套的文档来指示与文档相关的各种事件发生的位置。我正在使用聚合来获取这些地方的各个方面。返回的计数是该地点出现的次数。例如,如果文档的出生和死亡地点为加利福尼亚,则加利福尼亚的聚合计数为 2。我希望聚合计数为包含特定地点的文档数,而不是包含该地点的子文档数.我的架构的相关部分如下所示:
"mappings": {
"document": {
"properties": {
"docId" : { "type": "keyword" },
"place": {
"type": "nested",
"properties": {
"id": { "type": "keyword" },
"type": { "type": "keyword" },
"loc": { "type" : "geo_point" },
"text": {
"type": "text",
"analyzer": "english",
"copy_to" : "text"
}
},
"dynamic": false
}
}
}
}
我可以通过像这样的简单聚合来获取分面,它检索类型为 place.vital.* 的地点(例如 place.vital.birth、place.vital.death 等),但计算嵌套文档的数量,而不是父文档的数量。
"aggs": {
"place.vital": {
"aggs": {
"types": {
"aggs": {
"values": {
"terms": {
"field": "place.id"
}
}
},
"terms": {
"field": "place.type",
"include": "place\.vital\..*"
}
}
},
"nested": {
"path": "place"
}
}
是否可以调整我的聚合,使其只对每个父文档计数一次?
我相信您可以使用嵌套字段来实现,但不能使用 parent child 关系。如果您正在寻找地点 为什么不搜索地点索引并按 child 过滤?
使用反向嵌套聚合。然后,这将创建一个包含嵌套计数的聚合和一个包含父计数的子聚合。
有关详细信息,请参阅 how to return the count of unique documents by using elasticsearch aggregation。