【问题标题】:Elastic Search: aggregation random order?弹性搜索:聚合随机顺序?
【发布时间】:2015-08-08 14:33:14
【问题描述】:

是否可以有随机顺序的聚合? 好像只有asc或者desc可能?

{
"aggs" : {
    "genders" : {
        "terms" : {
            "field" : "gender",
            "order" : { 
                "_count" : "asc" 
                }
            }
        }
    }
}

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    不,根据official documentation,术语聚合总是以一种或另一种方式排序。如果未指定,则聚合项按计数降序排序。

    如果需要,您始终可以在客户端以某种随机顺序随机排列结果。

    【讨论】:

    • 你好,瓦尔!您认为有解决方法吗?
    • 如何将脚本放入 aggs 即 { "aggs" : { "tags" : { "terms":{ "script" : { "inline": "Math.sin(33*(double) doc['gender'].value) + '_' + doc['gender'].value", "lang": "painless", "order" : { "_term" : "desc" } } } } } }
    • 这将使聚合值随机化
    【解决方案2】:

    是的,您可以显示随机结果 请参阅此处提供的答案:
    Random order & pagination Elasticsearch

    你可以试试这样的。我想随机化存储桶内的结果,所以我使用了它。

    {
      "aggs": {
        "genders": {
          "terms": {
            "field": "gender"
          },
          "aggs": {
            "search_second": {
              "top_hits": {
                "sort": {
                  "_script": {
                    "script": "Math.random()",
                    "type": "number",
                    "params": {},
                    "order": "asc"
                  }
                }
              }
            }
          }
        }
      }
    } 
    

    【讨论】:

    • 你好,Nakul91!我不确定您的回答是否直接回答了这个问题。有人询问如何随机排序术语聚合存储桶,但在您的回答中,您展示了如何对存储桶内的内部命中进行排序。这些是不同的东西。
    【解决方案3】:

    是的,这是可能的。这样做的:

    {
      "aggs": {
        "genders": {
          "terms": {
            "field": "gender",
            "size": 10,
            "order": {
              "rnd.max": "asc"
            }
          },
          "aggs": {
            "rnd": {
              "stats": {
                "script": "Math.random()"
              }
            }
          }
        }
      }
    }
    

    我在这里使用 stats-aggregation 作为我的随机数生成器,因为它具有脚本属性,但任何其他具有脚本属性的指标聚合也应该这样做。 您可以使用 terms-aggregation 的 size-property 来控制返回的桶数。该值越小,聚合运行的越快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 2019-11-08
      • 2021-02-19
      • 2023-03-18
      • 2021-10-11
      • 1970-01-01
      相关资源
      最近更新 更多