在 Elasticsearch 的每个文档中计算嵌套对象不超过一次



我有一个索引,其中包含以下结构的文档:

{
"_id" : "1234567890abcdef",
...
"entities" : [
{  
"name" : "beer",
"evidence_start" : 12,
"evidence_end" : 16
},
{  
"name" : "water",
"evidence_start" : 55,
"evidence_end" : 60
},
{  
"name" : "beer",
"evidence_start" : 123,
"evidence_end" : 127
},
...
]
}

entities是此处类型nested的对象。我需要数一数有多少文件包含关于啤酒的提及。 问题在于,明显的存储桶聚合返回的是提及量,而不是文档,因此,如果在同一文档中两次提及beer,则总结果也会增加 2。 我用来执行此操作的查询是:

{
...
"aggs": {
"entities": {
"nested": {
"path": "entities"
},
"aggs": {
"entity_count": {
"terms": {
"field": "entities.name",
"size" : 20
}
}
}
}
},
...
}

有没有办法只计算不同的提及而不编写脚本?

提前非常感谢。

你只需要将反向嵌套聚合作为子聚合,来计算"主文档"而不是嵌套文档的数量。

你应该尝试

{
...
"aggs": {
"entities": {
"nested": {
"path": "entities"
},
"aggs": {
"entity_count": {
"terms": {
"field": "entities.name",
"size" : 20
},
"aggs": {
"main_document_count": {
"reverse_nested": {}
}
}
}
}
}
},
...
}

最新更新