弹性搜索:聚合随机顺序?

时间:2015-05-26 18:57:08

标签: elasticsearch

是否可以使用随机顺序进行聚合? 似乎只有asc或desc可能吗?

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

3 个答案:

答案 0 :(得分:1)

根据official documentation,根据术语聚合总是按照这种或那种方式排序。如果未指定,则聚合术语按降序排序。

如果需要的话,你总是可以随机顺序在客户端随机播放结果。

答案 1 :(得分:1)

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

你可以尝试这样的事情。我想在桶内随机化结果,所以我使用它。

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

答案 2 :(得分:0)

是的,有可能。这样吗:

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

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