最近碰到一个需求,要求在查询商品数据时,查询出来的数据结果集需要进行随机排序,于是网上查询了大量的博客,找到了几篇比较不错的博客,是使用ES的DSL语句实现的随机排序;
DSL语句执行如下:
GET myIndex/_search
{
"from": 0,
"size": 20,
"timeout": "10s",
"sort": {
"_script": {
"script": "Math.random()",
"type": "number",
"order": "asc"
}
}
}复制
在Kibana中执行上述script语句比较好使,不过晚上没有找到比较完善的将DSL语句整合到Java中的API,有看到一篇博客,里面的Java代码如下:
Script script = new Script("Math.random()");
ScriptSortBuilder scriptSortBuilder = SortBuilders.scriptSort(script,ScriptSortBuilder.ScriptSortType.NUMBER).order(SortOrder.DESC);
NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withSort(scriptSortBuilder);复制
在上述代码中,通过script得到一个随机排序ScriptSortBuilder,不过折腾了好久,一直不知道如何使用这个ScriptSortBuilder;
在原来的程序中一直是使用的SearchSourceBuilder,现在新创建出来一个ScriptSortBuilder,不知道如何将二者之间建立关联;
在网友的指点下,对上述代码进行改进后,通过如下方式进行了随机排序的Java实现,代码如下
private void randomSort(SearchSourceBuilder sourceBuilder){
Script script = new Script("Math.random()");
ScriptSortBuilder sortBuilder = new ScriptSortBuilder(script, ScriptSortBuilder.ScriptSortType.NUMBER);
sourceBuilder.sort(sortBuilder);
}复制
通过查看ScriptSortBuilder类,发现ScriptSortBuilder是SortBuilder的子类,所以能够被SearchSourceBuilder所sort()方法添加到;
由于发现网上关于Java端的随机排序代码少之又少,遂分享出来,共有需要的朋友可以参考~
文章转载自加耀,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
阿里云 Elasticsearch Serverless 检索增强型 8.17 版来袭!
阿里云大数据AI技术
378次阅读
2025-04-18 10:24:15
AI 乱写代码怎么破?使用 Context7 MCP Server 让 AI 写出靠谱代码!
Se7en的架构笔记
131次阅读
2025-04-29 09:53:31
阿里云 Elasticsearch Serverless 检索增强型8.17版免费邀测!
阿里云大数据AI技术
66次阅读
2025-04-15 13:18:15
利用 EDB Postgres AI - WarehousePG 替换 Greenplum 实现数据仓库现代化
新智锦绣
64次阅读
2025-04-18 17:28:36
可观测性方案怎么选?SelectDB vs Elasticsearch vs ClickHouse
SelectDB
42次阅读
2025-05-09 16:48:09
Java萌新修炼手册⑥:面向对象の修仙奥义——从"散修"到"宗门大佬"的基因飞升!
让天下没有难学的编程
42次阅读
2025-04-25 10:10:40
Java萌新修炼手册②:Hello Worldの108种写法——从入门到入坟!
让天下没有难学的编程
38次阅读
2025-04-21 10:34:36
PGD4K 正式版发布!同时支持 Kubernetes 和 Openshift 平台
新智锦绣
37次阅读
2025-04-25 10:10:43
从 Java 到 Go:面向对象的巨人与云原生的轻骑兵
京东云开发者
35次阅读
2025-04-25 11:41:37
Java萌新修炼手册⑤:数组の千层套路——从"鸽子笼"到"摩天楼"的进阶之路!
让天下没有难学的编程
32次阅读
2025-04-25 10:10:41
热门文章
Druid 简单介绍和配置及使用
2018-11-18 2597浏览
【ElasticSearch进阶】理解Elasticsearch词频归一值BM25计算公式
2020-09-22 2579浏览
Canal-adapter1.1.4集成Elasticsearch7.8.0排坑指南及在本地环境运行canal-adapter项
2021-03-07 2370浏览
【网络安全】接口数据完整性校验及重放攻击防御可行性方案分析
2020-01-25 1679浏览
进阶篇 使用Jenkins发送程序包到远程服务器
2018-12-06 1544浏览
最新文章
关于Java线程池的7个参数说明及配置参考
2021-07-29 804浏览
Elasticsearch实现类主流搜索引擎广告置顶效果 及其 java代码实现pinned语法案例
2021-05-17 874浏览
Canal-adapter1.1.4集成Elasticsearch7.8.0排坑指南及在本地环境运行canal-adapter项
2021-03-07 2370浏览
Elasticsearch7.8.0集成IK分词器改源码实现MySql5.7.2实现动态词库实时更新
2020-10-24 1396浏览
Elasticsearch7.8.0查询高亮显示java代码示例
2020-09-25 1232浏览