有办法获得前n个术语的结果。例如:
{
"aggs": {
"apiSalesRepUser": {
"terms": {
"field": "userName",
"size": 5
}
}
}
}

有没有办法设置条款结果的偏移量?
答案 0 :(得分:2)
如果你的意思是忽略第一个m
结果并返回下一个n
结果,那么就没有;这不可能。解决方法是将size
设置为m + n
并执行客户端处理以忽略第一个m
结果。
答案 1 :(得分:1)
稍晚一些,但是(至少)自Elastic 5.2.0起,您可以在术语聚合中使用分区来对结果进行分页。
答案 2 :(得分:0)
也许这会有所帮助:
"aggregations": {
"apiSalesRepUser": {
"terms": {
"field": "userName",
"size": 9999 ---> add here a bigger size
}
},
"aggregations": {
"limitBucket": {
"bucket_sort": {
"sort": [],
"from": 10,
"size": 20,
"gap_policy": "SKIP"
}
}
}
}
我不确定该术语的大小是多少。我建议给一个合理的值。这限制了初始聚合,然后第二个limitBucket agg将再次限制术语agg。这可能仍会将您在术语agg中限制的所有文档加载到内存中。这就是为什么它取决于您的方案的原因,如果合理,则无法获得所有结果(即,如果您有成千上万个)。也就是说,您正在执行类似Google的搜索,而无需跳至第1000页。
与在客户端获取数据的替代方法相比,这可以为您节省一些从ES进行数据传输的费用,但是正如我所说的那样,在将所有大量数据加载到ES内存中时请仔细权衡一下,您可能会遇到内存问题在ElasticSearch中