当前位置: 首页 > news >正文

网站建设物美价廉一览英才网

网站建设物美价廉,一览英才网,怎么推广自己的qq群,广告网站 源码文章目录 前言前期准备springbootElasticsearch依赖 思路准备数据查询数据处理文本样式处理 具体实施数据准备创建索引数据存储进行查询 踩坑记录聚合查询不生效问题 demo地址总结 前言 最近项目中使用Elasticsearch在做快速查询的功能#xff0c;然后就想到了之前的一个项目… 文章目录 前言前期准备springbootElasticsearch依赖 思路准备数据查询数据处理文本样式处理 具体实施数据准备创建索引数据存储进行查询 踩坑记录聚合查询不生效问题 demo地址总结 前言 最近项目中使用Elasticsearch在做快速查询的功能然后就想到了之前的一个项目中有一个词云的功能就想用Elasticsearch实现一下词云的效果实现思路很简单目前这个demo已经写完了透露一下很简陋如何想要在项目中实际应用还需要改进。 前期准备 springbootElasticsearch依赖 版本我用的springboot 2.3.12.RELEASE对应的Elasticsearch是7.6.2 !-- elasticsearch相关依赖--dependencygroupIdorg.elasticsearch/groupIdartifactIdelasticsearch/artifactId/dependencydependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-high-level-client/artifactId/dependency!-- ikanalyzer 中文分词器 --dependencygroupIdcom.janeluo/groupIdartifactIdikanalyzer/artifactIdversion2012_u6/version/dependency思路 准备数据 将需要生成词云的文本数据存储到ES中。可以将文本拆分为单个词语并将其作为文档的字段保存到ES中。 查询数据 使用ES的查询功能检索文档数据。可以根据业务需求编写查询语句以获取需要的文本数据。 处理文本 将查询到的文本数据进行处理例如去除停用词、统计词频等。 样式处理 这个不在本文章的范畴内在上面的步骤就已经简单的实现一部分高频词的内容了所以下面的这些是属于具体业务了本文只提供一个思路和demo 选择关键词根据需求可以根据词频进行排序选择一定数量的高频词作为关键词。 生成词云使用词云生成工具库如WordCloud来生成词云图像。根据关键词的频率和重要性在画布上布局词语并设置相应的颜色、字体等样式。 展示词云将生成的词云图像展示在前端页面或保存为图片文件。如果在网页中展示可以使用HTML和CSS来控制布局和样式。 具体实施 数据准备 就是单纯的准备数据阶段使用下面这个数据中的数据随机生成一些句子然后再使用Ik的工具包进行分词分词以后存储到ES中 static final String[] CHINESE_WORDS {我, 你, 他, 她, 它,是, 的, 在, 这, 那,很, 真, 爱, 喜欢,美丽, 快乐, 拥抱, 友情, 理解,幸福, 梦想, 努力, 成功, 明天,希望, 勇气, 坚定, 自信, 感恩,热爱, 青春, 成长, 智慧, 创新,开心, 失落, 放弃, 挑战, 困难,奋斗, 拼搏, 汗水, 收获, 感动,祝福, 寂寞, 无聊, 闲暇, 旅游,信任, 包容, 尊重, 宽容, 耐心};/*** description: 使用IK对这些句子进行分词* author: gepengjun* date: 2023/9/8 10:09* param: []* return: java.util.Listjava.lang.String**/ListString fenci() throws IOException {String text 我喜欢使用IK分词器进行中文分词。;ListString strings generateRandomChineseSentences(20);String context;for (String string : strings) {contextstring;}ListString listsnew ArrayList();try (StringReader reader new StringReader(context)) {IKSegmenter segmenter new IKSegmenter(reader, true);Lexeme lexeme;while ((lexeme segmenter.next()) ! null) {System.out.println(lexeme.getLexemeText());lists.add(lexeme.getLexemeText());}} catch (IOException e) {e.printStackTrace();}return lists;}/*** description: 生成句子的* author: gepengjun* date: 2023/9/8 10:09* param: [numSentences]生成多少条* return: java.util.Listjava.lang.String**/private static ListString generateRandomChineseSentences(int numSentences) {ListString sentences new ArrayList();Random random new Random();for (int i 0; i numSentences; i) {int numWords random.nextInt(10) 5; // 每个句子包含的词语数量范围为 5-14StringBuilder sb new StringBuilder();for (int j 0; j numWords; j) {int index random.nextInt(CHINESE_WORDS.length);sb.append(CHINESE_WORDS[index]);}String sentence sb.toString();sentences.add(sentence);}return sentences;}创建索引 存储数据前要先创建索引在ES中索引你可以理解为数据库中的表 Testvoid createIndex(){// 创建ES连接RestHighLevelClient client new RestHighLevelClient(RestClient.builder(new HttpHost(116.204.118.226, 9200, http)));try {// 创建索引请求CreateIndexRequest request new CreateIndexRequest(wordcloud);//简单理解就是建表// 设置索引的设置request.settings(Settings.builder().put(index.number_of_shards, 1).put(index.number_of_replicas, 1));// 设置索引的映射XContentBuilder mapping XContentFactory.jsonBuilder().startObject().startObject(properties).startObject(context) //建表字段的过程.field(type, text).startObject(keyword) // 添加一个名为 keyword 的子字段.field(type, keyword) // 子字段类型为 keyword.endObject().endObject().endObject().endObject();request.mapping(_doc,mapping);// 发送创建索引请求client.indices().create(request, RequestOptions.DEFAULT);System.out.println(索引创建成功);} catch (IOException e) {e.printStackTrace();} finally {// 关闭ES连接try {client.close();} catch (IOException e) {e.printStackTrace();}}}注意这里后面会用到 数据存储 注意我这些操作都是在单元测试中进行的 Testvoid insertData() throws IOException {// 创建一个 RestHighLevelClient 对象用于与 Elasticsearch 进行通信RestHighLevelClient client new RestHighLevelClient(RestClient.builder(new HttpHost(localhost, 9200, http)));// 创建一个 BulkRequest 对象用于批量操作请求BulkRequest request new BulkRequest();// 调用 fenci() 方法获取分词结果列表ListString strings fenci();// 遍历分词结果列表将每个分词作为一个文档添加到 BulkRequest 中for (String word: strings) {// 创建一个 IndexRequest 对象并指定要添加到的索引名称和文档内容request.add(new IndexRequest(wordcloud).source(context, word));}// 执行批量操作请求并获取响应BulkResponse response client.bulk(request, RequestOptions.DEFAULT);if (response.hasFailures()) {// 处理错误情况System.out.println(添加失败---------------------);} else {// 处理成功情况System.out.println(添加成功);}}进行查询 这里使用了es的聚合查询查询该索引下出现频率最高的前20个单词 Testvoid wrodCloud(){// 创建ES连接RestHighLevelClient client new RestHighLevelClient(RestClient.builder(new HttpHost(localhost, 9200, http)));try {// 构建搜索请求SearchRequest request new SearchRequest(wordcloud);SearchSourceBuilder sourceBuilder new SearchSourceBuilder();sourceBuilder.query(QueryBuilders.matchAllQuery());sourceBuilder.size(0); // 设置为0以仅返回聚合结果sourceBuilder.timeout(TimeValue.timeValueMinutes(1));// 添加词频统计的聚合sourceBuilder.aggregation(AggregationBuilders.terms(word_count).field(context.keyword).size(20)); // 返回频率最高的 20 个词语request.source(sourceBuilder);// 执行搜索请求SearchResponse response client.search(request, RequestOptions.DEFAULT);ParsedStringTerms wordCount response.getAggregations().get(word_count);for (Terms.Bucket bucket : wordCount.getBuckets()) {String word bucket.getKeyAsString();long frequency bucket.getDocCount();System.out.println(热门单词word);System.out.println(出现次数frequency);System.out.println(——————————————————————————————);}} catch (IOException e) {e.printStackTrace();} finally {// 关闭ES连接try {client.close();} catch (IOException e) {e.printStackTrace();}}}可以看到查询出来了20个单词以及出现的频率这样我们将这些单词以及频率进行一些简单的处理就能获得它们的占比然后返回到前端展示至于前端要使用什么用的控件或者框架是另一回事了因为这些数据是准备好的。 踩坑记录 聚合查询不生效问题 这个问题就是上面创建索引中截图圈出来的部分就是当我们对文本类型的数据进行聚合查询是需要设置它的子字段有一个keywrod类型的然后在查询的时候指定这个字段名.子字段名这种方式就能正常的使用es的聚合查询了。 在 Elasticsearch 中当需要对文本类型的字段进行聚合查询时需要使用额外的 “keyword” 类型的子字段。这样做的目的是为了将文本数据转换为可进行聚合操作的结构。 设置 “keyword” 子字段的步骤如下 创建索引时在字段的映射中为文本字段添加一个子字段。子字段的类型设置为 “keyword”表示它是一个非分词的字符串类型。可以为子字段指定任意的名称不一定非得叫 “keyword”。 通过将字段的类型设置为 “keyword”Elasticsearch 将保存原始文本数据并允许对该子字段进行精确的分组统计操作实现对文本字段的聚合查询。 demo地址 Demo地址 总结 关于使用这个es实现的这个效果个人认为这只是一种方案还有其它的这里是直接使用的分词工具包es上还可以安装分词插件所以我的这种不一定是最好的这是一种简单的方案希望大家不要被我的这种给迷惑了
http://www.ihoyoo.com/news/51024.html

相关文章:

  • 公司网页网站建wordpress 虚拟注册插件
  • 天水做网站的公司网站建设制作网络营销公司
  • 创意网站布局个人网页设计的意义
  • 如何查看网站的建设方式秦皇岛在什么地方
  • 数据库网站开发wordpress中文免费企业主题下载
  • 深圳 电子商务网站开发页面跳转html
  • 企业网站建设指标河北省石家庄市裕华区
  • 山东省建设业协会网站温州专业网站制作设计
  • 网站建设收获兰溪市住房和城乡建设局网站
  • wordpress缓存插件中山搜索引擎优化
  • 手机网站拒绝访问怎么解决网页设计及制作方法
  • 中国建设银行 网站登录做58同城网站需要多少钱
  • 织梦网站列表wordpress 微博侧边栏
  • 网站建设站点地图产品宣传网站开发
  • 网站如何做好seo二手网站设计与建设
  • 怎么用php自己做网站吗石家庄建站工具
  • 苏州网站开发网站建立费用wordpress-5.0.3
  • 资兴市网站建设服务商seo快速优化方法
  • 雄安建站服务网站详情页
  • 凡科网站建设总结柳州微网站开发
  • 中国空间站组成部分关键字搜索引擎
  • 中国建设监理业协会网站阿里云win服务器怎么做网站
  • 海珠免费网站建设华为手机网络营销策划方案
  • 网站建设收费标准方案wordpress 更换模板
  • 建设网站注册会员网站的备案可以管几年
  • 网站建设架构中小网站 架构
  • 建网站 多少钱钱建筑设计公司资质
  • 网站建设网页与数据库连接北京网站建设是什么
  • 做画册封面的网站防做网站视频
  • 怎么做网站上做电子书质量管理