ElasticSearch返回聚合随机顺序

时间:2018-06-19 17:23:46

标签: elasticsearch

我有以下ElasticSearch查询,可从“ cat.id”上分组的每个“类别”中获取10个文档:

"aggs": {
    "test": {
        "terms": {
            "size": 10,
            "field": "cat.id"
        },
        "aggs": {
            "top_test_hits": {
                "top_hits": {
                    "_source": {
                        "includes": [
                            "id"
                        ]
                    },
                    "size": 10
                }
            }
        }
    }
}

这很好。但是我似乎找不到一种方法,可以从每个存储桶中随机抽取10个结果。结果总是一样的。我希望每个存储桶中有10个随机物品。我尝试了各种用于文档的东西,但似乎都不起作用。

1 个答案:

答案 0 :(得分:0)

正如this answer中已经建议的那样,您可以尝试在top_hits聚合中使用随机排序,例如使用_script

{
  "aggs": {
    "test": {
      "terms": {
        "size": 10,
        "field": "cat.id"
      },
      "aggs": {
        "top_test_hits": {
          "top_hits": {
            "_source": {
              "includes": [
                "id"
              ]
            },
            "size": 10,
            "sort": {
              "_script": {
                "type": "number",
                "script": {
                  "lang": "painless",
                  "source": "(System.currentTimeMillis() + doc['_id'].value).hashCode()"
                },
                "order": "asc"
              }
            }
          }
        }
      }
    }
  }
}

question中广泛涉及了随机排序。

希望有帮助!