我在elasticsearch中有一个嵌套文档,如下所示:
{
{
"doctxt": "doca",
"nested": [
{
"pos": 1,
"txt": "terma"
},
{
"pos": 2,
"txt": "termb"
},
{
"pos": 3,
"txt": "termc"
}
]
},
{
"doctxt": "docb",
"nested": [
{
"pos": 1,
"txt": "termd"
},
{
"pos": 2,
"txt": "terma"
},
{
"pos": 3,
"txt": "termb"
}
]
}
}
有效的聚合查询:
特定术语的总计数(match_all查询,术语txt上的聚合),结果:
terma: 2
termb: 2
termc: 1
termd: 1
特定术语的txt字段上的构面(过滤术语txt,术语txt上的聚合),结果:
terma: termb (2), termc (1), termd (1)
termb: terma (2), termc (1), termd (1)
termc: terma (1), termb (1)
termd: terma (1), termb (1)
我对此文档无法做到的是:
特定术语的平均值(我最终得到整个嵌套位置的平均值,在这种情况下,任何术语总是2),预期结果:
terma: 1.5
termb: 2.5
termc: 3
termd: 1
特定术语的直方图(与上述原因不同),预期结果:
terma: pos 1 (1), pos 2 (1)
termb: pos 2 (1), pos 3 (1)
termc: pos 3 (1)
termd: pos 1 (1)
如果我有平面文件(doca-1-terma,doca-2-termb,doca-3-termc,docb-1-termd,......),我会得到预期的结果。这是聚合嵌套文档的限制吗?我应该以平面格式和当前嵌套格式存储两次数据吗?
答案 0 :(得分:0)
不,不是真的。您可以使用nested types实现您需要实现的目标。嵌套类型将使您的嵌套数据单独处理并获得预期结果。
试试这个要点:https://gist.github.com/vaidik/051a197654fe4b0ecc80
另外read this article about relationships。我认为您可以通过家长/儿童文档实现相同目标,但我还没有与他们合作过多。