elasticsearch 在Elasticsearch中,每个文档中的嵌套对象计数不超过一次
我有一个索引,其中包含以下结构的文档:elasticsearch 在Elasticsearch中,每个文档中的嵌套对象计数不超过一次,elasticsearch,elasticsearch,我有一个索引,其中包含以下结构的文档: { "_id" : "1234567890abcdef", ... "entities" : [ { "name" : "beer", "evidence_start" : 12, "evidence_end" : 16 }, { "name" : "water", "evidence_start" : 55, "evidence_end"
{
"_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
},
...
]
}
实体
是此处嵌套的类型的对象。我需要数一数有多少文件提到了啤酒。
问题在于,一个明显的bucket聚合返回的是提及的数量,而不是文档,因此,如果在同一文档中两次提及beer
,那么它也会将总结果加起来2。
我使用的查询是:
{
...
"aggs": {
"entities": {
"nested": {
"path": "entities"
},
"aggs": {
"entity_count": {
"terms": {
"field": "entities.name",
"size" : 20
}
}
}
}
},
...
}
有没有一种方法可以只计算不同的提及而不编写脚本
非常感谢。您只需将a作为子聚合,即可计算“主文档”的数量,而不是嵌套文档的数量
你应该试试
{
...
"aggs": {
"entities": {
"nested": {
"path": "entities"
},
"aggs": {
"entity_count": {
"terms": {
"field": "entities.name",
"size" : 20
},
"aggs": {
"main_document_count": {
"reverse_nested": {}
}
}
}
}
}
},
...
}