前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >检索业务:构建结果数据与分析

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

作者头像
一个风轻云淡
发布于 2023-10-15 01:35:46
发布于 2023-10-15 01:35:46
20500
代码可运行
举报
文章被收录于专栏:java学习javajava学习java
运行总次数:0
代码可运行
明确返回的结果对象数据

 结果对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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;
    }
    
}

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private SearchResult buildSearchResult(SearchResponse response,SearchParam param)
页码信息进行构造 

  "hits" : {     "total" : {       "value" : 4,       "relation" : "eq"     }

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//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);
返回所有查询到的商品

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        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);
当前商品涉及到的所有属性信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
当前所有商品涉及到的所有品牌信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
当前所有商品涉及到的所有分类信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 明确返回的结果对象数据
  •  结果对象
  • 页码信息进行构造 
  • 返回所有查询到的商品
  • 当前商品涉及到的所有属性信息
  • 当前所有商品涉及到的所有品牌信息
  • 当前所有商品涉及到的所有分类信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档