Pri*_*att 7 elasticsearch elasticsearch-aggregation
我有一个用例,其中我有数据
{
name: "John",
parentid": "1234",
filter: {a: '1', b: '3', c: '4'}
},
{
name: "Tim",
parentid": "2222",
filter: {a: '2', b: '1', c: '4'}
},
{
name: "Mary",
parentid": "1234",
filter: {a: '1', b: '3', c: '5'}
},
{
name: "Tom",
parentid": "2222",
filter: {a: '1', b: '3', c: '1'}
}
Run Code Online (Sandbox Code Playgroud)
预期成绩:
bucket:[{
key: "2222",
hits: [{
name: "Tom" ...
},
{
name: "Tim" ...
}]
},
{
key: "1234",
hits: [{
name: "John" ...
},
{
name: "Mary" ...
}]
}]
Run Code Online (Sandbox Code Playgroud)
我想通过返回唯一的文件parentid.虽然我可以使用顶级聚合,但我不知道如何对存储桶进行分页.因为有更多的机会parentid与众不同.所以我的桶阵列会很大,我想通过对它们进行分页来显示所有这些.
没有直接的方法可以做到这一点。但您可以按照以下步骤来获得所需的结果。
步骤1.你应该知道一切parentid。可以通过在字段上执行简单的操作(在此处terms aggregation阅读更多)来获取此数据,您将仅获得 的列表,而不是与其匹配的文档。最后,您将拥有一个比您当前预期更小的阵列。parentidparentid
{
"aggs": {
"parentids": {
"terms": {
"field": "parentid",
"size": 0
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
size: 0 需要返回所有结果。在这里阅读更多内容。
或者
如果您已经知道所有列表parentid,则可以直接转到步骤 2。
步骤2.通过过滤文档来获取相关文档,parentid在这里您可以应用分页。
{
"from": 0,
"size": 20,
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": {
"parentid": "2222"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
from和size用于分页,因此您可以循环遍历parentid列表中的每个文档并获取所有相关文档。
| 归档时间: |
|
| 查看次数: |
1018 次 |
| 最近记录: |