有办法获得前 n 项结果。例如:
{
"aggs": {
"apiSalesRepUser": {
"terms": {
"field": "userName",
"size": 5
}
}
}
}
有没有办法为条款结果设置偏移量?
有办法获得前 n 项结果。例如:
{
"aggs": {
"apiSalesRepUser": {
"terms": {
"field": "userName",
"size": 5
}
}
}
}
有没有办法为条款结果设置偏移量?
If you mean something like ignore first m
results and return the next n
results then no; it is not possible. A workaround to that would be to set size
to m + n
and do client side processing to ignore the first m
results.
有点晚了,但(至少)从 Elastic 5.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 中遇到内存问题