ElasticSearch easy-es 聚合函数 group by 混合写法求Top N 词云 分词

1.将用户访问记录表数据同步到ES,并且分词,获取用户访问最多前十条词语。

Elasticsearch、Easy-es 快速入门 SearchAfterPage分页 若依前后端分离 Ruoyi-Vue SpringBoot

使用结巴分词器

        <!-- 分词器--><dependency><groupId>com.huaban</groupId><artifactId>jieba-analysis</artifactId><version>1.0.2</version></dependency>

初始化数据

public void createAndInitToES() {// 1.初始化-> 创建索引(相当于mysql中的表)esTzLyViewCountMapper.deleteIndex("tz_ly_view_count");esTzLyViewCountMapper.createIndex();esTzLyViewCountWordFrequencyMapper.deleteIndex("tz_ly_view_count_word");esTzLyViewCountWordFrequencyMapper.createIndex();MPJLambdaWrapper<TzLyViewCount> tzLyViewCountWrapper = JoinWrappers.lambda(TzLyViewCount.class).selectAll(TzLyViewCount.class).selectAs("lyUser", TzLyUser::getGender, TzLyViewCount::getGender).selectAs("lyUser", TzLyUser::getEthnicity, TzLyViewCount::getEthnicity).selectAs("lyUser", TzLyUser::getPoliticalStatus, TzLyViewCount::getPoliticalStatus).selectAs("lyUser", TzLyUser::getDomain, TzLyViewCount::getDomain).selectAs("lyUser", TzLyUser::getAreaCode, TzLyViewCount::getAreaCode).leftJoin(TzLyUser.class, "lyUser", on -> on.eq(TzLyViewCount::getViewUserId, TzLyUser::getId));//本地限制数据大小tzLyViewCountWrapper.between(TzLyViewCount::getCreatedDate, DateUtil.parse("2024-01-01 00:00:00"), DateUtil.parse("2024-02-01 00:00:00"));int currentPage = 1;int pageSize = 1000;while (true) {PageUtils.startPage(currentPage, pageSize);List<TzLyViewCount> list = tzLyViewCountMapper.selectList(tzLyViewCountWrapper);// 如果当前页没有数据,说明查询结束if (CollectionUtil.isEmpty(list)) {break;}EsTzLyViewCount esTzLyViewCount = null;List<EsTzLyViewCount> esTzLyViewCountList = new ArrayList<>(list.size() * 2);for (TzLyViewCount viewCount : list) {esTzLyViewCount = new EsTzLyViewCount();BeanUtils.copyBeanProp(esTzLyViewCount, viewCount);esTzLyViewCountList.add(esTzLyViewCount);}splitWordAndInsertEs(esTzLyViewCountList);// 准备查询下一页currentPage++;}}public void splitWordAndInsertEs(List<EsTzLyViewCount> esTzLyViewCountList) {JiebaSegmenter js = new JiebaSegmenter();EsTzLyViewCountWord esTzLyViewCountWord = null;List<EsTzLyViewCountWord> esTzLyViewCountWordList = new ArrayList<>();for (EsTzLyViewCount esTzLyViewCount : esTzLyViewCountList) {if (StringUtils.isNotBlank(esTzLyViewCount.getViewTitle())) {List<String> wordList = js.sentenceProcess(esTzLyViewCount.getViewTitle());for (String word : wordList) {if (word.length() >= 2) {esTzLyViewCountWord = new EsTzLyViewCountWord();BeanUtils.copyBeanProp(esTzLyViewCountWord, esTzLyViewCount);esTzLyViewCountWord.setViewTitleWord(word);esTzLyViewCountWordList.add(esTzLyViewCountWord);}}}}esTzLyViewCountWordFrequencyMapper.insertBatch(esTzLyViewCountWordList);esTzLyViewCountMapper.insertBatch(esTzLyViewCountList);}
easy-es 聚合函数 混合写法
 /*** 访问信息关键词*/public List<HashMap<String, Long>> accessInformationKeyword(StatisticsDateQueryVo statisticsDateQueryVo) {LambdaEsQueryWrapper<EsTzLyViewCountWord> wrapper = new LambdaEsQueryWrapper<>();//不返回任何文档wrapper.size(0);//限制文档聚合范围if (ObjectUtils.isNotEmpty(statisticsDateQueryVo.getBgnTimestamp()) && StringUtils.isNotNull(statisticsDateQueryVo.getEndTimestamp())) {Date bgnTimestamp = new Date(statisticsDateQueryVo.getBgnTimestamp().getTime());Date endTimestamp = new Date(statisticsDateQueryVo.getEndTimestamp().getTime());wrapper.between(EsTzLyViewCountWord::getCreatedDate, bgnTimestamp, endTimestamp);} else {// 获取当前年份(假设 statisticsDateQueryVo.getQueryTimestamp() 返回的是Date类型)Date queryDate = statisticsDateQueryVo.getQueryTimestamp();Calendar calendar = Calendar.getInstance();calendar.setTime(queryDate);int currentYear = calendar.get(Calendar.YEAR);// 获取当前年份的第一天(使用Calendar来设置日期部分)calendar.set(Calendar.YEAR, currentYear);calendar.set(Calendar.MONTH, Calendar.JANUARY);calendar.set(Calendar.DAY_OF_MONTH, 1);calendar.set(Calendar.HOUR_OF_DAY, 0);calendar.set(Calendar.MINUTE, 0);calendar.set(Calendar.SECOND, 0);calendar.set(Calendar.MILLISECOND, 0);Date firstDayOfYear = calendar.getTime();// 获取当前年份的最后一天(使用Calendar来设置日期部分)calendar.set(Calendar.YEAR, currentYear);calendar.set(Calendar.MONTH, Calendar.DECEMBER);calendar.set(Calendar.DAY_OF_MONTH, 31);calendar.set(Calendar.HOUR_OF_DAY, 23);calendar.set(Calendar.MINUTE, 59);calendar.set(Calendar.SECOND, 59);calendar.set(Calendar.MILLISECOND, 999);Date lastDayOfYear = calendar.getTime();// 设置查询条件(这里的wrapper类似前面示例中的查询条件包装类,需根据实际调整)wrapper.between(EsTzLyViewCountWord::getCreatedDate, firstDayOfYear, lastDayOfYear);}AggregationBuilder aggregation = AggregationBuilders.terms("viewTitleWordAgg")// 自定义聚合名.field("viewTitleWord") //聚合字段
//                .order() 排序,默认降序.size(10); //要十条记录SearchSourceBuilder searchSourceBuilder = esTzLyViewCountWordFrequencyMapper.getSearchSourceBuilder(wrapper);searchSourceBuilder.aggregation(aggregation);wrapper.setSearchSourceBuilder(searchSourceBuilder);SearchResponse searchResponse = esTzLyViewCountWordFrequencyMapper.search(wrapper);List<HashMap<String, Long>> list = new ArrayList<>();Aggregation viewTitleWordAgg = searchResponse.getAggregations().getAsMap().get("viewTitleWordAgg");for (int i = 0; i < ((Terms) viewTitleWordAgg).getBuckets().size(); i++) {Terms.Bucket bucket = ((Terms) viewTitleWordAgg).getBuckets().get(i);HashMap<String, Long> hashMap = new HashMap<>();hashMap.put(bucket.getKeyAsString(), bucket.getDocCount());list.add(hashMap);}return list;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/483719.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年12月3日Github流行趋势

项目名称&#xff1a;Lobe Chat 项目维护者&#xff1a;arvinxx, semantic-release-bot, canisminor1990, lobehubbot, renovate项目介绍&#xff1a;一个开源的、现代化设计的人工智能聊天框架。支持多种AI提供商&#xff08;OpenAI / Claude 3 / Gemini / Ollama / Qwen / De…

vue2+cesium初始化地图

目录 1、在vue2项目中下载cesium 2、安装loader 3、更改vue.config.js中的配置 4、main.js中引入 5、App.vue中设置样式 6、新建map.vue 其中代码如下&#xff1a; 7、在App.vue中使用Map组件 8、效果展示&#xff1a; 1、在vue2项目中下载cesium npm install cesium 可…

CTF-PWN: WEB_and_PWN [第一届“吾杯”网络安全技能大赛 Calculator] 赛后学习(不会)

附件 calculate.html <!DOCTYPE html> <html lang"en"> <head><!-- 设置字符编码为 UTF-8&#xff0c;支持多语言字符集 --><meta charset"UTF-8"><!-- 设置响应式视图&#xff0c;确保页面在不同设备上自适应显示 --&…

TYUT设计模式精华版

七大原则 单一职责原则 职责要单一不能将太多的职责放在一个类中 开闭原则 软件实体对扩展是开放的&#xff0c;但对修改是关闭的 里氏代换原则 一个可以接受基类对象的地方必然可以接受子类 依赖倒转原则 要针对抽象层编程&#xff0c;而不要针对具体类编程 接口隔离原则 …

Android 使用OpenGLES + MediaPlayer 获取视频截图

概述 Android 获取视频缩略图的方法通常有: ContentResolver: 使用系统数据库MediaMetadataRetriever: 这个是android提供的类&#xff0c;用来获取本地和网络media相关文件的信息ThumbnailUtils: 是在android2.2&#xff08;api8&#xff09;之后新增的一个&#xff0c;该类为…

论文阅读——量子退火Experimental signature of programmable quantum annealing

摘要&#xff1a;量子退火是一种借助量子绝热演化解决复杂优化问题的通用策略。分析和数值证据均表明&#xff0c;在理想化的封闭系统条件下&#xff0c;量子退火可以胜过基于经典热化的算法&#xff08;例如模拟退火&#xff09;。当前设计的量子退火装置的退相干时间比绝热演…

Vue框架开发一个简单的购物车(Vue.js)

让我们利用所学知识来开发一个简单的购物车 &#xff08;记得暴露属性和方法&#xff01;&#xff01;&#xff01;&#xff09; 首先来看一下最基本的一个html框架 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…

瑞芯微方案主板Linux修改系统串口波特率教程,触觉智能RK3562开发板演示

遇到部分串口工具不支持1500000波特率&#xff0c;这时候就需要进行修改&#xff0c;本文以触觉智能RK3562开发板修改系统波特率为115200为例&#xff0c;介绍瑞芯微方案主板Linux修改系统串口波特率教程。 温馨提示&#xff1a;瑞芯微方案主板/开发板串口波特率只支持115200或…

攻防世界-fileclude-文件包含

赛前回顾 1.题目打开后是文件包含的代码&#xff0c;如下 函数作用 highlight_file(__FILE__) //显示代码到网页 isset //检查变量是否存在并且非null(空) !empty //php内置函数&#xff0c;检查变量是否为空或未设置&#xff0c;正常变量为空会触发&#xff0c;但是有个…

039集——渐变色之:CAD中画彩虹()(CAD—C#二次开发入门)

&#xff08;来左边儿 跟我一起画个龙&#xff0c;在你右边儿 画一道彩虹 ~~~~~~~~~~~ &#xff09; 效果如下&#xff1a; 以下展示部分颜色源码&#xff1a; namespace AcTools {public class Class1{public Wform.Timer timer;//定时器需建在类下面public s…

Spark和MapReduce场景应用和区别

文章目录 Spark和MapReduce场景应用和区别一、引言二、MapReduce和Spark的应用场景1. MapReduce的应用场景2. Spark的应用场景 三、MapReduce和Spark的区别1. 内存使用和性能2. 编程模型和易用性3. 实时计算支持 四、使用示例1. MapReduce代码示例2. Spark代码示例 五、总结 Sp…

泛化调用 :在没有接口的情况下进行RPC调用

什么是泛化调用&#xff1f; 在RPC调用的过程中&#xff0c;调用端向服务端发起请求&#xff0c;首先要通过动态代理&#xff0c;动态代理可以屏蔽RPC处理流程&#xff0c;使得发起远程调用就像调用本地一样。 RPC调用本质&#xff1a;调用端向服务端发送一条请求消息&#x…

D87【python 接口自动化学习】- pytest基础用法

day87 pytest运行参数 -m -k 学习日期&#xff1a;20241203 学习目标&#xff1a;pytest基础用法 -- pytest运行参数-m -k 学习笔记&#xff1a; 常用运行参数 pytest运行参数-m -k pytest -m 执行特定的测试用例&#xff0c;markers最好使用英文 [pytest] testpaths./te…

Android 应用单元测试涉及 Telephony 环境初始化问题

Telephony 相关类注入问题 SubscriptionManager Cannot invoke "android.telephony.SubscriptionManager.getActiveSubscriptionInfoList()" because "this.mSubscriptionManager" is nulljava.lang.NullPointerException: Cannot invoke "android.t…

【Spring】介绍一下 Spring 的 xml 标签以及 Bean 的常用配置

文章目录 配置标签<beans>标签<import>标签<alias> 标签自定义标签 BeanBean 常用配置Bean 作用域Bean 实例化流程Bean 生命周期 配置标签 Spring 的 xml 标签大体上分为两类&#xff0c;一种是默认标签&#xff0c;一种是自定义标签 默认标签&#xff1a;…

MySQL篇—通过官网下载linux系统下多种安装方式的MySQL社区版软件

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

大数据新视界 -- 大数据大厂之 Hive 数据压缩算法对比与选择(下)(20 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

有趣的Docker

&#x1f449;【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中 1. Docker 上的“全世界”命令行 你可以在 Docker 容器中运行一个模拟的 “世界地图”&#xff0c;并通过命令行与它互动。这是一个非常有趣的项目&#xff0c;结合了命令行和图形界面的交互。…

Day4:生信新手笔记 — R语言简单命令与Rstudio配置

一、Rstudio的界面展示 (很像Matlab风格) 二、Rstudio设置字体大小 三、 用Rproject管理工作目录 工作目录(working directory) 即当前所在的目录&#xff0c;是脚本、图片、文件的默认保存位置&#xff0c;也是文件读取的默认位置。R语言只能和一个文件夹进行互动&#xff0…

【ArkTS】使用AVRecorder录制音频 --内附录音机开发详细代码

系列文章目录 【ArkTS】关于ForEach的第三个参数键值 【ArkTS】“一篇带你读懂ForEach和LazyForEach” 【小白拓展】 【ArkTS】“一篇带你掌握TaskPool与Worker两种多线程并发方案” 【ArkTS】 一篇带你掌握“语音转文字技术” --内附详细代码 【ArkTS】技能提高–“用户授权”…