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

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

明确返回的结果对象数据


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


相关文章
|
9月前
|
搜索推荐 数据可视化 数据挖掘
构建精准的目标客户群用户画像构建
构建精准的目标客户群用户画像
603 6
|
搜索推荐
统一召回引擎的优势
统一召回引擎的优势
120 0
|
安全
统一召回引擎
统一召回引擎
77 0
|
2月前
|
存储 缓存 算法
《如何在代码中实现高效的数据存储和检索》
高效数据存储与检索的方法包括:选用合适的数据结构(如哈希表、二叉搜索树)、利用索引加速查询、通过数据分区减少搜索范围、使用缓存提升访问速度、优化算法(如二分查找)以及应用数据库优化技术。综合这些策略,可显著提高数据处理效率。
|
3月前
|
存储 自然语言处理 数据可视化
3倍提升效率:医疗病理信息抽取与关系图谱展示系统解析
该项目旨在通过NLP技术将医疗病理报告中的非结构化文本转化为结构化数据,实现信息的高效抽取、存储及可视化展示。利用Python、JavaScript等技术栈,结合Echarts等工具,构建病理信息的关系图谱,支持多条件检索与图表互动,提高医生及研究人员的工作效率。预期成果包括数据结构化、关系图谱可视化、快速检索及数据统计分析等功能。项目预计2-4周完成。
Nyx
|
4月前
|
算法
文档智能和检索增强生成构建知识库
本文介绍了文档智能(Document Mind)与检索增强生成(RAG)结合使用的原理及其优势。文档智能负责解析和结构化文档内容,RAG则利用这些数据提供准确的问答服务。部署过程中,清晰的步骤指导和详细的文档帮助快速解决问题。方案适用于企业知识库、客户支持系统等场景,但在处理大文档和复杂格式时需进一步优化。
Nyx
69 0
|
6月前
|
存储 人工智能 自然语言处理
知识库优化增强,支持多种数据类型、多种检索策略、召回测试 | Botnow上新
Botnow近期对其知识库功能进行了全面升级,显著提升了数据处理能力、检索效率及准确性。新版本支持多样化的数据格式,包括PDF、Word、TXT、Excel和CSV等文件,无需额外转换即可直接导入,极大地丰富了知识来源。此外,还新增了细致的文本分片管理和编辑功能,以及表格数据的结构化处理,使知识管理更为精细化。 同时,平台提供了多种检索策略,包括混合检索、语义检索和全文检索等,可根据具体需求灵活选择,有效解决了大模型幻觉问题,增强了专业领域的知识覆盖,从而显著提高了回复的准确性。这些改进广泛适用于客服咨询、知识问答等多种应用场景,极大提升了用户体验和交互质量。
124 4
|
6月前
|
SQL 缓存 数据挖掘
数据平台问题之复合指标生成中维度能力如何处理
数据平台问题之复合指标生成中维度能力如何处理
|
6月前
|
数据可视化 数据挖掘 数据处理
数据平台问题之想提高指标获取效率要如何实现
数据平台问题之想提高指标获取效率要如何实现
104 2
|
9月前
|
机器学习/深度学习 监控 自动驾驶
新视频分析技术TDViT发布:提升稠密视频分析效率
【2月更文挑战第16天】新视频分析技术TDViT发布:提升稠密视频分析效率
123 1
新视频分析技术TDViT发布:提升稠密视频分析效率