【问题标题】:Elasticsearch nested aggregation with range aggregation具有范围聚合的 Elasticsearch 嵌套聚合
【发布时间】:2018-03-28 14:34:10
【问题描述】:

我对 ElasticSearch 非常陌生,并试图找出一种情况 我必须在其中显示来自 Elasticsearch 的特定 JSON 数据。请 见下面代码

def bucket_for_order_amount(buckets, aggregations)
        buckets['order_range'] = {
          range: {
            field: :total,
            keyed: true, 
            ranges: [
                { to: 25.0 },
                { from: 25.0, to: 50.0 },
                { from: 50.0, to: 75.0 },
                { from: 75.0, to: 100.0 },
                { from: 100.0 }
            ]
          }
        }     
      end

这将返回 JON 响应:

"report": {
        "order_range": {
            "buckets": {
                "*-25.0": {
                    "to": 25,
                    "doc_count": 0
                },
                "25.0-50.0": {
                    "from": 25,
                    "to": 50,
                    "doc_count": 0
                },
                "50.0-75.0": {
                    "from": 50,
                    "to": 75,
                    "doc_count": 0
                },
                "75.0-100.0": {
                    "from": 75,
                    "to": 100,
                    "doc_count": 0
                },
                "100.0-*": {
                    "from": 100,
                    "doc_count": 2
                }
            }
        }

我有一种情况,如果该范围内存在任何用户,我必须显示 doc_count 内的用户列表,但我不确定哪个 需要使用聚合来实现这种响应。

响应是这样的:-

"*-25.0": {
              "to": 25,
              "doc_count": 2
                         {
                     user1,
                     user2
               },
},

【问题讨论】:

    标签: ruby-on-rails-4 elasticsearch


    【解决方案1】:

    您可以为此目的使用top_hits 子聚合:

      def bucket_for_order_amount(buckets, aggregations)
        buckets['order_range'] = {
          range: {
            field: :total,
            keyed: true, 
            ranges: [
                { to: 25.0 },
                { from: 25.0, to: 50.0 },
                { from: 50.0, to: 75.0 },
                { from: 75.0, to: 100.0 },
                { from: 100.0 }
            ]
          },
          aggs: {
            users: { top_hits: {} }
          }
        }     
      end
    

    【讨论】:

    • 感谢@Val 的快速回复。但我猜 top_hits 只会显示权重最高的用户,而不是全部。
    • 在 top_hits 中,您可以添加一个 size 设置,设置您认为需要的任何大小(低于 10000)
    猜你喜欢
    • 2018-11-28
    • 1970-01-01
    • 2021-12-14
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 2016-10-14
    相关资源
    最近更新 更多