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

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

明确返回的结果对象数据


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);


相关文章
|
7月前
|
搜索推荐 数据可视化 数据挖掘
构建精准的目标客户群用户画像构建
构建精准的目标客户群用户画像
543 6
|
搜索推荐
统一召回引擎的优势
统一召回引擎的优势
109 0
|
存储 固态存储 索引
搜索和推荐统一存储层的新进展和思考
我们在2017年统一了搜索和推荐场景下的HA3、iGraph、RTP和DII四大引擎的存储层(参见统一之战),帮助它们取得了的更迅速的迁移能力、更快速的数据恢复能力和更丰富的数据召回能力。 最近一年来,我们在统一的存储框架上又做了进一步的演进,下面将分别从架构、Build服务以及存储模型角度介绍我们的新进展和思考。   1.架构   在我们的传统架构(参见统一之战)中,
2854 0
|
4月前
|
SQL 缓存 数据挖掘
数据平台问题之复合指标生成中维度能力如何处理
数据平台问题之复合指标生成中维度能力如何处理
|
7月前
|
机器学习/深度学习 监控 自动驾驶
新视频分析技术TDViT发布:提升稠密视频分析效率
【2月更文挑战第16天】新视频分析技术TDViT发布:提升稠密视频分析效率
113 1
新视频分析技术TDViT发布:提升稠密视频分析效率
视频结构化——原子能力解析
视频结构化是指对视频数据进行结构化处理,通过对原视频进行智能分析,提取出视频中的关键信息,以标签文本的形式进行描述。
599 0
视频结构化——原子能力解析
|
存储 数据采集 XML
大数据数据采集的数据来源的日志数据之搜索类数据
在大数据领域,数据采集是一个非常重要的环节。日志数据已经成为了大数据应用中不可或缺的一部分,尤其是搜索类数据。本文将介绍搜索类日志数据作为数据来源的特点以及其采集流程。
189 0
|
7月前
|
搜索推荐 关系型数据库 分布式数据库
使用 PolarDB 开源版 采用array数组和gin索引高效率解决用户画像、实时精准营销类业务需求
背景PolarDB 的云原生存算分离架构, 具备低廉的数据存储、高效扩展弹性、高速多机并行计算能力、高速数据搜索和处理; PolarDB与计算算法结合, 将实现双剑合璧, 推动业务数据的价值产出, 将数据变成生产力.本文将介绍使用 PolarDB 开源版高效率解决用户画像、实时精准营销类业务需求测试...
110 0
|
存储 并行计算 供应链
使用 PolarDB 开源版 采用array数组和gin索引高效率解决用户画像、实时精准营销类业务需求
PolarDB 的云原生存算分离架构, 具备低廉的数据存储、高效扩展弹性、高速多机并行计算能力、高速数据搜索和处理; PolarDB与计算算法结合, 将实现双剑合璧, 推动业务数据的价值产出, 将数据变成生产力. 本文将介绍使用 PolarDB 开源版高效率解决用户画像、实时精准营销类业务需求
287 0
|
存储 数据采集 机器学习/深度学习
数据能力的构建过程
数据能力的构建过程
359 1
下一篇
DataWorks