ElasticSearch随机查询

一、某些场景可能需要在全部数据或者条件查询中返回随机的几条数据

比如随机返回4条数据

方式一:随机排序

DSL语句

{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "_script": {
        "script": "Math.random()",
        "type": "number",
        "order": "asc"
      }
    }
  ]
}

Java api

Script script = new Script("Math.random()");
ScriptSortBuilder sortBuilder = new ScriptSortBuilder(script, ScriptSortBuilder.ScriptSortType.NUMBER);
sourceBuilder.sort(sortBuilder);

这种方式在原先数据集合不要求排序的情况下使用,因为随机数排序会打乱之前原有的顺序,如果要求根据某个字段排序之后再随机返回数据,可以用下面这种方式

方式二:随机分页

因为是分页查询,所以需要提前知道索引的总条数,可以单独查一次

java代码随机分页

Query query = queryBuilder.withQuery(searchSourceBuilder.query())
                .withSort(sortBuilder)
                .withPageable(PageRequest.of(0, size))
                .build();

 在PageRequest.of()传入计算后的页数与条数即可

posted @ 2022-06-27 16:06  木马不是马  阅读(1796)  评论(0编辑  收藏  举报