179、商城业务-检索服务-SearchRequest构建-检索

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("catelogId",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(":");//这个属性检索用的值
                boolQuery.must(QueryBuilders.termQuery("attrs.attrId",attrId));
                boolQuery.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(QueryBuilders.termQuery("hasStock",param.getHasStock() == 1));
        }


        //1.2.5 skuPrice
        if(!StringUtils.isEmpty(param.getSkuPrice())){
            //skuPrice形式为:1_500或_500或500_
            RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("skuPrice");
            String[] s = param.getSkuPrice().split("_");
            if(s.length==2){
                rangeQuery.gte(s[0]).lte(s[1]);
            }else if(s.length == 1){
                if(param.getSkuPrice().startsWith("_")){
                    rangeQuery.lte(s[1]);
                }
                if(param.getSkuPrice().endsWith("_")){
                    rangeQuery.gte(s[0]);
                }
            }
            boolQuery.filter(rangeQuery);
        }

        //封装所有的查询条件
        sourceBuilder.query(boolQuery);

猜你喜欢

转载自blog.csdn.net/pyd1040201698/article/details/108362558