181、商城业务-检索服务-SearchRequest构建-聚合

本文详细介绍了如何使用Elasticsearch构建商品检索系统,包括模糊匹配、属性、分类、品牌、价格区间、库存的过滤,排序,分页,高亮显示及聚合分析等功能,通过具体的代码实现和DSL语句解析,深入理解商品检索系统的构建过程。
/**
     * 准备检索请求
     * 模糊匹配,过滤(按照属性,分类,品牌,价格区间,库存),排序,分页,高亮,聚合分析
     * @return
     */
    private SearchRequest buildSearchRequest(SearchParam param) {

        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); //构建 DSL 语句的

        /**
         * 模糊匹配,过滤(按照属性,分类,品牌,价格区间,库存)
         */
        //1. 构建bool-query
        BoolQueryBuilder boolQuery = new BoolQueryBuilder();

        //1.1 bool-must 模糊匹配
        if(!StringUtils.isEmpty(param.getKeyword())){
            boolQuery.must(QueryBuilders.matchQuery("skuTitle",param.getKeyword()));
        }

        //1.2 bool-fiter
        //1.2.1 catelogId  -- 按照三级分类id
        if(null != param.getCatalog3Id()){
            boolQuery.filter(QueryBuilders.termQuery("catalogId",param.getCatalog3Id()));
        }

        //1.2.2 brandId  品牌
        if(null != param.getBrandId() && param.getBrandId().size() >0){
            boolQuery.filter(QueryBuilders.termsQuery("brandId",param.getBrandId()));
        }

        //1.2.3 attrs   属性
        if(param.getAttrs() != null && param.getAttrs().size() > 0){

            for(String attrStr : param.getAttrs()) {
                //attrs=1_5寸:8寸&2_16G:8G
                BoolQueryBuilder nestedboolQuery = QueryBuilders.boolQuery();
                //attrs=1_5寸:8寸
                String[] s = attrStr.split("_");
                String attrId=s[0];
                String[] attrValues = s[1].split(":");//这个属性检索用的值
                nestedboolQuery.must(QueryBuilders.termQuery("attrs.attrId",attrId));
                nestedboolQuery.must(QueryBuilders.termsQuery("attrs.attrValue",attrValues));
                NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery("attrs",nestedboolQuery, ScoreMode.None);
                boolQuery.filter(nestedQuery);
            }


//            param.getAttrs().forEach(item -> {
//                //attrs=1_5寸:8寸&2_16G:8G
//                BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//
//
//                //attrs=1_5寸:8寸
//                String[] s = item.split("_");
//                String attrId=s[0];
//                String[] attrValues = s[1].split(":");//这个属性检索用的值
//                boolQuery.must(QueryBuilders.termQuery("attrs.attrId",attrId));
//                boolQuery.must(QueryBuilders.termsQuery("attrs.attrValue",attrValues));
//
//                NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery("attrs",boolQuery, ScoreMode.None);
//                queryBuilder.filter(nestedQueryBuilder);
//            });



        }

        //1.2.4 hasStock  是否有库存
        if(null != param.getHasStock()){
            boolQuery.filter(QueryBuilder
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值