我有以下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个随机物品。我尝试了各种用于文档的东西,但似乎都不起作用。
答案 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中广泛涉及了随机排序。
希望有帮助!