6

有办法获得前 n 项结果。例如:

{
  "aggs": {
    "apiSalesRepUser": {
      "terms": {
        "field": "userName",
        "size": 5
      }
    }
  }
}

有没有办法为条款结果设置偏移量?

4

3 回答 3

3

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.

于 2015-04-02T13:39:22.750 回答
1

有点晚了,但(至少)从 Elastic 5.2.0 开始,您可以在聚合术语中使用分区来对结果进行分页。

https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-terms-aggregation.html#_filtering_values_with_partitions

于 2020-01-16T06:32:43.460 回答
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 中遇到内存问题

于 2020-04-02T14:32:05.090 回答