检索业务:构建结果数据与分析

简介: 检索业务:构建结果数据与分析

明确返回的结果对象数据


59fb029ced7249e5b3cf04c6e2b2325e.png

结果对象

@Data
public class SearchResult {
    /**
     * 查到的所商品信息
     */
    private List<SkuEsModel> products;
    private  Integer pageNum;//当前页面
    private  Long total;//总记录数
    private  Integer totalPages;//总页码
    private List<CatalogVo> catalogs;//当前查到的结果涉及的所有分类
    private  List<BrandVo> brands;//当前查到的结果涉及的品牌
    private  List<AttrVo> attrs;//当前查到的结果涉及的属性
    @Data
    public static  class BrandVo{
        private Long brandId;
        private  String brandName;
        private  String brandImg;
    }
    @Data
    public  static  class  AttrVo{
        private  Long attrId;
        private  String attrName;
        private  List<String> attrValue;
    }
    @Data
    public  static  class  CatalogVo{
        private  Long catalogId;
        private  String catalogName;
    }
}

private SearchResult buildSearchResult(SearchResponse response,SearchParam param)

页码信息进行构造

  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    }
//5.分页信息-页码
long total = hits.getTotalHits().value;
result.setPageNum(param.getPageNum());
//5.分页信息-总页码
int totalPages= (int) (total%EsConstant.PRODUCT_PAGESIZE==0?total/EsConstant.PRODUCT_PAGESIZE:total/EsConstant.PRODUCT_PAGESIZE+1);
result.setTotalPages(totalPages);
//5.分页信息-总记录数
result.setTotal(total);

返回所有查询到的商品


image.png

 List<SkuEsModel> esModels=new ArrayList<>();
        SearchHits hits = response.getHits();
        if (hits.getHits()!=null&&hits.getHits().length>0){
            for (SearchHit hit : hits.getHits()) {
                String sourceAsString = hit.getSourceAsString();
                SkuEsModel skuEsModel = JSON.parseObject(sourceAsString, SkuEsModel.class);
                if(!StringUtils.isEmpty(param.getKeyword())){
                    HighlightField skuTitle = hit.getHighlightFields().get("skuTitle");
                    String string = skuTitle.getFragments()[0].string();
                    skuEsModel.setSkuTitle(string);
                }
                esModels.add(skuEsModel);
            }
        }
        result.setProducts(esModels);

当前商品涉及到的所有属性信息


12989cfc6bb24219974e885f26c6744f.png

List<SearchResult.AttrVo> attrVos = new ArrayList<>();
ParsedNested attr_agg = response.getAggregations().get("attr_agg");
ParsedLongTerms attr_id_agg = attr_agg.getAggregations().get("attr_id_agg");
for (Terms.Bucket bucket : attr_id_agg.getBuckets()) {
    SearchResult.AttrVo attrVo=new SearchResult.AttrVo();
    //得到属性的id
    long attrId = bucket.getKeyAsNumber().longValue();
    // 得到属性的名字
    String attrName = ((ParsedStringTerms) bucket.getAggregations().get("attr_name_agg")).getBuckets().get(0).getKeyAsString();
    //得到属性的所有值
    List<String> attrValue = ((ParsedStringTerms) bucket.getAggregations().get("attr_value_agg")).getBuckets().stream().map(item -> {
        String keyAsString = item.getKeyAsString();
        return keyAsString;
    }).collect(Collectors.toList());
    attrVo.setAttrId(attrId);
    attrVo.setAttrName(attrName);
    attrVo.setAttrValue(attrValue);
    attrVos.add(attrVo);
}
result.setAttrs(attrVos);

当前所有商品涉及到的所有品牌信息


8353f396a4a54728a6e9e549fa28779d.png

ArrayList<SearchResult.BrandVo> brandVos = new ArrayList<>();
ParsedLongTerms brand_agg = response.getAggregations().get("brand_agg");
for (Terms.Bucket bucket : brand_agg.getBuckets()) {
    SearchResult.BrandVo brandVo = new SearchResult.BrandVo();
    //1.品牌的id
    Long   brandId = bucket.getKeyAsNumber().longValue();
    //3.得到品牌的图片
    String brand_img = ((ParsedStringTerms) bucket.getAggregations().get("brand_img_agg")).getBuckets().get(0).getKeyAsString();
    //2.得到品牌的名
    String brand_name_agg = ((ParsedStringTerms) bucket.getAggregations().get("brand_name_agg")).getBuckets().get(0).getKeyAsString();
    brandVo.setBrandId(brandId);
    brandVo.setBrandImg(brand_img);
    brandVo.setBrandName(brand_name_agg);
    brandVos.add(brandVo);
}
result.setBrands(brandVos);

当前所有商品涉及到的所有分类信息


699aa198a93e4af5a49f851feeeb8d36.png

Aggregations aggregations = response.getAggregations();
ParsedLongTerms catalog_agg = aggregations.get("catalog_agg");
List<? extends Terms.Bucket> buckets = catalog_agg.getBuckets();
List<SearchResult.CatalogVo> catalogVos=new ArrayList<>();
for (Terms.Bucket bucket : buckets) {
    SearchResult.CatalogVo catalogVo=   new  SearchResult.CatalogVo();
    //得到分类id
    String keyAsString = bucket.getKeyAsString();
    catalogVo.setCatalogId(Long.parseLong(keyAsString));
    //得到分类名
    ParsedStringTerms catalog_name_agg = bucket.getAggregations().get("catalog_name_agg");
    String catalog_name = catalog_name_agg.getBuckets().get(0).getKeyAsString();
    catalogVo.setCatalogName(catalog_name);
    catalogVos.add(catalogVo);
}
result.setCatalogs(catalogVos);


相关文章
|
弹性计算 JavaScript 编译器
语言入门-2:基本类型
本实验将介绍TypeScript中的基本类型。
|
11月前
|
机器学习/深度学习 算法 数据建模
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
189 0
|
Ubuntu
一分钟在Ubuntu 20.04安装QEMU-KVM + Virt-Manage
一分钟在Ubuntu 20.04安装QEMU-KVM + Virt-Manage
|
XML 监控 API
淘宝商品详情数据接口全攻略:如何高效获取与分析商品信息
【淘宝商品详情数据接口全攻略】:注册开发者账号,申请API权限,构建HTTP请求获取商品信息,包括基础属性、价格等。遵循规则,处理并分析数据,用于竞品分析、价格监控和用户行为洞察。利用接口高效获取数据,助力电商决策。#淘宝API #数据分析
|
12月前
|
存储 编译器 C语言
取一个整数a从右端开始的4~7位。
取一个整数a从右端开始的4~7位。
108 1
R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析(中)
R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析
|
消息中间件 Docker 容器
RabbitMq启动时报错,Error: {cannot_write_enabled_plugins_file,“/etc/rabbitmq/enabled_plugins“,eacces}
RabbitMq启动时报错,Error: {cannot_write_enabled_plugins_file,“/etc/rabbitmq/enabled_plugins“,eacces}
597 0
|
缓存 开发框架 NoSQL
SpringCloud微服务实战——搭建企业级开发框架(二十):集成Reids缓存
这章我们来介绍在系统中引入redisson-spring-boot-starter依赖来实现redis缓存管理 1、在GitEgg-Platform中新建gitegg-platform-redis用于管理工程中用到的Redis公共及通用方法。
627 57
SpringCloud微服务实战——搭建企业级开发框架(二十):集成Reids缓存
|
弹性计算 数据安全/隐私保护
阿里云域名注册+服务器购买+备案教程
备案前准备: 注册账号——备案前您需要拥有一个阿里云账号(支付宝账户可直接登录) 域名准备——备案前需完成域名注册及实名认证 服务器准备——购买阿里云大陆境内服务器,或获取服务器的备案服务号 备案负责人手机下载“阿里云”APP
阿里云域名注册+服务器购买+备案教程