【问题标题】:Limit and Offset in Term Aggregation ElasticSearch术语聚合 ElasticSearch 中的限制和偏移
【发布时间】:2015-06-07 09:22:33
【问题描述】:

有办法获得前 n 个词的结果。例如:

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

有什么方法可以设置terms结果的偏移量吗?

【问题讨论】:

标签: elasticsearch elasticsearch-aggregation


【解决方案1】:

如果您的意思是先忽略m 结果并返回下一个n 结果,则否;这不可能。解决方法是将size 设置为m + n 并进行客户端处理以忽略第一个m 结果。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      也许这有点帮助:

      "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 内存中,您可能会遇到内存问题在弹性搜索中

      【讨论】:

        猜你喜欢
        • 2014-07-09
        • 2019-12-06
        • 2021-06-06
        • 2020-09-20
        • 2021-06-06
        • 2015-11-06
        • 2015-01-21
        • 2015-06-26
        • 1970-01-01
        相关资源
        最近更新 更多