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

申报湖南创新型省份建设专项网站网络工程师报名时间2021

申报湖南创新型省份建设专项网站,网络工程师报名时间2021,广告设计培训班学校有哪些,上海网站建设一般多少钱文章目录 ⛄引言一、数据聚合⛅简介⚡聚合的分类 二、DSL实现数据聚合⏰Bucket聚合⚡Metric聚合 三、RestAPI实现数据聚合⌚业务需求⏰业务代码实现 ✅效果图⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎#xff0c;具备非常… 文章目录 ⛄引言一、数据聚合⛅简介⚡聚合的分类 二、DSL实现数据聚合⏰Bucket聚合⚡Metric聚合 三、RestAPI实现数据聚合⌚业务需求⏰业务代码实现 ✅效果图⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎具备非常多强大功能可以帮助我们从海量数据中快速找到需要的内容 本篇文章将讲解 Elastic Search 如何实现数据聚合以及 在项目实战中如何通过数据聚合实现业务需求并完成功能。 一、数据聚合 ⛅简介 以下为官方 解释 聚合可以进行各种组合以构建复杂的数据汇总。 可以看作是在一组文档上建立分析信息的工作单元统计一些文档集。聚合可以将一些独立的功能单元可以被混合在一起来满足你的需求是一种单独的语法。 kibana的可视化看板就是非常经典的聚合功能的体现。 简单的来说 聚合 可以让我们极其方便的实现对数据的统计、分析、运算。例如 什么品牌的手机最受欢迎这些手机的平均价格、最高价格、最低价格这些手机每月的销售情况如何 实现这些统计功能的比数据库的sql要方便的多而且查询速度非常快可以实现实时搜索效果。 聚合就是类似于垃圾分类干湿分离每个桶中装不同的数据。 ⚡聚合的分类 聚合主要分为三大类 桶Bucket 聚合用来对文档做分组 TermAggregation按照文档字段值分组例如按照品牌值分组、按照国家分组Date Histogram按照日期阶梯分组例如一周为一组或者一月为一组 度量Metric 聚合用以计算一些值比如最大值、最小值、平均值等 Avg求平均值Max求最大值Min求最小值Stats同时求max、min、avg、sum等 管道pipeline 聚合其它聚合的结果为基础做聚合 注意 参加聚合的字段必须是keyword、日期、数值、布尔类型 二、DSL实现数据聚合 例如要统计所有数据中的酒店品牌有几种其实就是按照品牌对数据分组。此时可以根据酒店品牌的名称做聚合也就是Bucket聚合。 ⏰Bucket聚合 语法如下 GET /hotel/_search {size: 0, // 设置size为0结果中不包含文档只包含聚合结果aggs: { // 定义聚合brandAgg: { //给聚合起个名字terms: { // 聚合的类型按照品牌值聚合所以选择termfield: brand, // 参与聚合的字段size: 20 // 希望获取的聚合结果数量}}} }结果如图 聚合结果进行数据排序 默认情况下Bucket聚合会统计Bucket内的文档数量记为 count并且按照 _count降序排序。 我们可以指定 order属性自定义聚合的排序方式 GET /hotel/_search {size: 0, aggs: {brandAgg: {terms: {field: brand,order: {_count: asc // 按照_count升序排列},size: 20}}} }限定聚合范围 默认情况下Bucket聚合是对索引库的所有文档做聚合但真实场景下用户会输入搜索条件因此聚合必须是对搜索结果聚合。那么聚合必须添加限定条件。 我们可以限定要聚合的文档范围只要添加query条件即可 GET /hotel/_search {query: {range: {price: {lte: 200 // 只对200元以下的文档聚合}}}, size: 0, aggs: {brandAgg: {terms: {field: brand,size: 20}}} }⚡Metric聚合 我们对酒店按照品牌分组形成了一个个桶。现在我们需要对桶内的酒店做运算获取每个品牌的用户评分的min、max、avg等值。 这就要用到Metric聚合了例如stat聚合就可以获取min、max、avg等结果。 语法如下 GET /hotel/_search {size: 0, aggs: {brandAgg: { terms: { field: brand, size: 20},aggs: { // 是brands聚合的子聚合也就是分组后对每组分别计算score_stats: { // 聚合名称stats: { // 聚合类型这里stats可以计算min、max、avg等field: score // 聚合字段这里是score}}}}} }这次的score_stats聚合是在 brandAgg 的聚合内部嵌套的子聚合。因为我们需要在每个桶分别计算。 另外我们还可以给聚合结果做个排序例如按照每个桶的酒店平均分做排序 聚合小结 aggs代表聚合与query同级此时query的作用是 限定聚合的的文档范围 聚合必须的三要素 聚合名称聚合类型聚合字段 聚合可配置属性有 size指定聚合结果数量order指定聚合结果排序方式field指定聚合字段 三、RestAPI实现数据聚合 API语法 聚合条件与query条件同级别因此需要使用request.source()来指定聚合条件。 聚合条件的语法 聚合的结果也与查询结果不同API也比较特殊。不过同样是JSON逐层解析 ⌚业务需求 需求在搜索页面的品牌、城市等信息不应该是在页面写死而是通过聚合索引库中的酒店数据得来的 需求分析 目前页面的城市列表、星级列表、品牌列表都是写死的并不会随着搜索结果的变化而变化。但是用户搜索条件改变时搜索结果会跟着变化。 例如用户搜索“天安门”那搜索的酒店肯定是在虹桥附近因此城市只能是上海此时城市列表中就不应该显示其他城市信息了。 也就是说搜索结果中包含哪些城市页面就应该列出哪些城市搜索结果中包含哪些品牌页面就应该列出哪些品牌。 如何得知搜索结果中包含哪些品牌如何得知搜索结果中包含哪些城市 使用聚合功能利用Bucket聚合对搜索结果中的文档基于品牌分组、基于城市分组就能得知包含哪些品牌、哪些城市了。 因为是对搜索结果聚合因此聚合是限定范围的聚合也就是说聚合的限定条件跟搜索文档的条件一致。 查看浏览器可以发现前端其实已经发出了这样的一个请求 因此返回的类型应该是以下 结果是一个Map结构 key是字符串城市、星级、品牌、价格value是集合例如多个城市的名称 ⏰业务代码实现 在HotelController中添加一个方法遵循下面的要求 请求方式POST请求路径/hotel/filters请求参数RequestParams与搜索文档的参数一致返回值类型MapString, ListString 代码 PostMapping(filters)public MapString, ListString getFilters(RequestBody RequestParams params){return hotelService.getFilters(params);}这里调用了IHotelService中的getFilters方法尚未实现。 在IHotelService中定义新方法 MapString, ListString filters(RequestParams params);在HotelService中实现该方法 Override public MapString, ListString filters(RequestParams params) {try {// 1.准备RequestSearchRequest request new SearchRequest(hotel);// 2.准备DSL// 2.1.querybuildBasicQuery(params, request);// 2.2.设置sizerequest.source().size(0);// 2.3.聚合buildAggregation(request);// 3.发出请求SearchResponse response client.search(request, RequestOptions.DEFAULT);// 4.解析结果MapString, ListString result new HashMap();Aggregations aggregations response.getAggregations();// 4.1.根据品牌名称获取品牌结果ListString brandList getAggByName(aggregations, brandAgg);result.put(品牌, brandList);// 4.2.根据品牌名称获取品牌结果ListString cityList getAggByName(aggregations, cityAgg);result.put(城市, cityList);// 4.3.根据品牌名称获取品牌结果ListString starList getAggByName(aggregations, starAgg);result.put(星级, starList);return result;} catch (IOException e) {throw new RuntimeException(e);} }private void buildAggregation(SearchRequest request) {request.source().aggregation(AggregationBuilders.terms(brandAgg).field(brand).size(100));request.source().aggregation(AggregationBuilders.terms(cityAgg).field(city).size(100));request.source().aggregation(AggregationBuilders.terms(starAgg).field(starName).size(100)); }private ListString getAggByName(Aggregations aggregations, String aggName) {// 4.1.根据聚合名称获取聚合结果Terms brandTerms aggregations.get(aggName);// 4.2.获取bucketsList? extends Terms.Bucket buckets brandTerms.getBuckets();// 4.3.遍历ListString brandList new ArrayList();for (Terms.Bucket bucket : buckets) {// 4.4.获取keyString key bucket.getKeyAsString();brandList.add(key);}return brandList; }✅效果图 ⛵小结 以上就是【Bug 终结者】对 Spring Boot 整合 分布式搜索引擎 Elastic Search 实现 搜索、分页与结果过滤 的简单介绍ES搜索引擎无疑是最优秀的分布式搜索引擎使用它可大大提高项目的灵活、高效性 技术改变世界 如果这篇【文章】有帮助到你希望可以给【Bug 终结者】点个赞创作不易如果有对【后端技术】、【前端领域】感兴趣的小可爱也欢迎关注❤️❤️❤️ 【Bug 终结者】❤️❤️❤️我将会给你带来巨大的【收获与惊喜】
http://www.w-s-a.com/news/651761/

相关文章:

  • 做影视网站引流网页美工设计课程教案
  • 响应式网站开发流程图网站优化seo教程
  • 做汽车团购网站百度官网平台
  • 网站增加关键字建设旅游网站的功能定位
  • 怎么搭建源码网站义乌网络
  • 定远规划建设局网站wordpress云主机安装
  • 慈溪市网站开发软件开发文档国家标准
  • 本地佛山顺德网站设计公司的网站如何建设
  • 网站建设前十名网站建设 招标书
  • 手机网站标准百度搜索关键词排名优化推广
  • 中国空间站科幻作文1000字wordpress运行库
  • 徐州做网站的wordpress可视化编辑器排行
  • 官方网站英语上海公司注册核名查询
  • 东莞网站建设推广云南昆明最新消息
  • 上网站乱码网页设计与网站建设案例教程
  • 宣讲网站建设wordpress多媒体主题
  • 如何成立网站互联网开发是做什么的
  • 网站首页的尺寸做多大网页图片排版
  • 龙岩天宫山索道多少钱河南网站排名优化哪家好
  • 北京做网站设计程序员和网站开发
  • 个人 做自媒体 建网站图片制作成视频的手机软件
  • h5 建站网站 移动端重庆潼南网站建设价格
  • 商企在线营销型网站怎么做时光网站
  • 网站建设方案论文1500竞价托管哪家便宜
  • 使用cdn的网站宣武网站建设
  • 营销型网站怎么建设企业网站Wap在线生成
  • 网站建设服务费应该做到什么科目广州网页制作服务商
  • 网站显示500错误怎么解决方法店面设计模板
  • 网站备案icp文化传媒有限公司
  • 北京企业建站模板微信公众号商城怎么制作