网站建设哪家公司好招聘电商导购网站开发

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

网站建设哪家公司好招聘,电商导购网站开发,天津魔方网站建设,wordpress企业营销模板聚合可以让我们极其方便的实现对数据的统计、分析、运算。例如#xff1a; 什么品牌的手机最受欢迎#xff1f; 这些手机的平均价格、最高价格、最低价格#xff1f; 这些手机每月的销售情况如何#xff1f; 实现这些统计功能的比数据库的sql要方便的多#xff0c;而且… 聚合可以让我们极其方便的实现对数据的统计、分析、运算。例如 什么品牌的手机最受欢迎 这些手机的平均价格、最高价格、最低价格 这些手机每月的销售情况如何 实现这些统计功能的比数据库的sql要方便的多而且查询速度非常快可以实现近实时搜索效果 聚合种类 聚合常见的有三类 桶Bucket聚合用来对文档做分组 TermAggregation按照文档字段值分组例如按照品牌值分组、按照国家分组 Date Histogram按照日期阶梯分组例如一周为一组或者一月为一组 度量Metric聚合用以计算一些值比如最大值、最小值、平均值等 Avg求平均值 Max求最大值 Min求最小值 Stats同时求max、min、avg、sum等 管道pipeline聚合其它聚合的结果为基础做聚合 注意参加聚合的字段必须是keyword、日期、数值、布尔类型   DSL实现聚合 语句 GET /hotel/_search {size: 0,aggs: {brandAgg: {terms: {field: brand,size: 20}}} } 设置size为0结果中不包含文档只包含聚合结果aggs定义聚合brandAgg给聚合起个名字terms聚合的类型按照品牌值聚合所以选择termfield参与聚合的字段terms里面的sezi希望获取的聚合结果数量 发起请求的结果  聚合结果排序 默认情况下Bucket聚合会统计Bucket内的文档数量记为count并且按照count降序排序。 我们可以指定order属性自定义聚合的排序方式,按照_count降序排列 GET /hotel/_search {size: 0, aggs: {brandAgg: {terms: {field: brand,order: {_count: desc },size: 20}}} } 发起请求的结果 按照_count降序排列。 限定聚合范围 默认情况下Bucket聚合是对索引库的所有文档做聚合但真实场景下用户会输入搜索条件因此聚合必须是对搜索结果聚合。那么聚合必须添加限定条件。我们可以限定要聚合的文档范围只要添加query条件即可。 只对200元以下的文档聚合 GET /hotel/_search {query: {range: {price: {lte: 200 }}}, size: 0, aggs: {brandAgg: {terms: {field: brand,size: 20}}} } 聚合得到的品牌明显变少了   Metric聚合语法 现在我们需要对桶内的酒店做运算获取每个品牌的用户评分的min、max、avg等值 score_stats聚合是在brandAgg的聚合内部嵌套的子聚合。因为我们需要在每个桶分别计算 GET /hotel/_search {size: 0, aggs: {brandAgg: { terms: { field: brand, size: 20},aggs: { score_stats: { stats: { field: score }}}}} } 我们还可以给聚合结果做个排序例如按照每个桶的酒店平均分做排序,score_stats.avg对score聚合函数的平均值进行降序排序。 GET /hotel/_search {size: 0, aggs: {brandAgg: { terms: { field: brand, size: 20,order: {score_stats.avg: desc}},aggs: { score_stats: { stats: { field: score }}}}} } 小结 aggs代表聚合与query同级   聚合必须的三要素 聚合名称 聚合类型 聚合字段
聚合可配置属性有 size指定聚合结果数量 order指定聚合结果排序方式 field指定聚合字段
java代码实现聚合 搜索页面的品牌、城市等信息不应该是在页面写死而是通过聚合索引库中的酒店数据得来的   controller类 import cn.itcast.hotel.pojo.PageResult; import cn.itcast.hotel.pojo.RequestParams; import cn.itcast.hotel.service.IHotelService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.List; import java.util.Map;RestController RequestMapping(/hotel) public class HotelController {Autowiredprivate IHotelService hotelService;PostMapping(filters)public MapString, ListString getFilters(RequestBody RequestParams params){return hotelService.getFilters(params);} } service类 import cn.itcast.hotel.mapper.HotelMapper; import cn.itcast.hotel.pojo.Hotel; import cn.itcast.hotel.pojo.HotelDoc; import cn.itcast.hotel.pojo.PageResult; import cn.itcast.hotel.pojo.RequestParams; import cn.itcast.hotel.service.IHotelService; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.geo.GeoPoint; import org.elasticsearch.common.unit.DistanceUnit; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder; import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;Service public class HotelService extends ServiceImplHotelMapper, Hotel implements IHotelService {Autowiredprivate RestHighLevelClient client;Overridepublic MapString, ListString getFilters(RequestParams params) {try {// 1.准备RequestSearchRequest request new SearchRequest(hotel);// 2.准备DSL// 2.1.query// buildBasicQuery(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;}}发送请求获得结果