java操作solr实现多条件查询

飞一样的编程
飞一样的编程
擅长邻域:Java,MySQL,Linux,nginx,springboot,mongodb,微信小程序,vue

分类: ssm 专栏: 爱旅行项目 标签: java操作solr实现多条件查询

2023-02-20 18:46:05 392浏览

java操作solr实现多条件查询
if (EmptyUtils.isEmpty(vo) || EmptyUtils.isEmpty(vo.getDestination())){
            throw new Exception("目的地不能为空");
        }
        SolrQuery solrQuery = new SolrQuery("*:*");
        StringBuilder qQuery = new StringBuilder();

        if (EmptyUtils.isNotEmpty(vo)) {

            //q条件
            //destination (string): [必填] 目的地


            qQuery.append("destination:" + vo.getDestination());

            //keyword (string): [非必填] 关键字
            if (EmptyUtils.isNotEmpty(vo.getKeywords())) {
                qQuery.append(" AND keyword:" + vo.getKeywords());
            }
            if (EmptyUtils.isNotEmpty(qQuery.toString())) {
                solrQuery.setQuery(qQuery.toString());
            }
            //fq条件
            //hotelLevel (integer): [非必填] 酒店级别(1-5)
            if (EmptyUtils.isNotEmpty(vo.getHotelLevel())) {
                solrQuery.addFilterQuery("hotelLevel:" + vo.getHotelLevel() + "");
            }
            //featureIds (String): [非必填] 酒店特色id
            if (EmptyUtils.isNotEmpty(vo.getFeatureIds())) {
                StringBuilder buffer = new StringBuilder("(");
                int flag = 0;
                //特色 前台是复选框,可以勾选多个作为查询条件
                // 123,125,127
                String featureIdArray[] = vo.getFeatureIds().split(",");
                for (String featureId : featureIdArray) {
                    if (flag == 0) {
                        buffer.append(" featureIds:" + "*," + featureId + ",*");
                    } else {
                        buffer.append(" OR featureIds:" + "*," + featureId + ",*");
                    }
                    flag++;
                }
                buffer.append(")");
                solrQuery.addFilterQuery(buffer.toString());
            }

            //tradeAreaIds (string): [非必填] 商圈id
            if (EmptyUtils.isNotEmpty(vo.getTradeAreaIds())) {
                StringBuilder buffer = new StringBuilder("(");
                int flag = 0;
                //前台是复选框,可以勾选多个作为查询条件
                String tradeAreaIdArray[] = vo.getTradeAreaIds().split(",");
                for (String tradeAreaId : tradeAreaIdArray) {
                    if (flag == 0) {
                        buffer.append(" tradingAreaIds:" + "*," + tradeAreaId + ",*");
                    } else {
                        buffer.append(" OR tradingAreaIds:" + "*," + tradeAreaId + ",*");
                    }
                    flag++;
                }
                buffer.append(")");
                solrQuery.addFilterQuery(buffer.toString());
            }

            //maxPrice (number): [非必填] 最高价
            if (EmptyUtils.isNotEmpty(vo.getMaxPrice())) {
                solrQuery.addFilterQuery("minPrice:" + "[* TO " + vo.getMaxPrice() + "]");
            }

            //minPrice (number): [非必填] 最低价
            if (EmptyUtils.isNotEmpty(vo.getMinPrice())) {
                solrQuery.addFilterQuery("minPrice:" + "[" + vo.getMinPrice() + " TO *]");
            }

            //ascSort (string): [非必填] 按照某个字段升序排
            // 取值为(isOkCount或avgScore或minPrice或hotelLevel)
            // isOkCount-最受欢迎 avgScore-评分 minPrice-价格 hotelLevel-星级
            //点下升序排,在点下就按降序排
            if (EmptyUtils.isNotEmpty(vo.getAscSort())) {
                solrQuery.addSort(vo.getAscSort(), SolrQuery.ORDER.asc);
            }

            //descSort (string): [非必填] 按照某个字段降序排
            // 取值为(isOkCount或avgScore或minPrice或hotelLevel)
            // isOkCount-最受欢迎 avgScore-评分 minPrice-价格 hotelLevel-星级
            if (EmptyUtils.isNotEmpty(vo.getDescSort())) {
                solrQuery.addSort(vo.getDescSort(), SolrQuery.ORDER.desc);
            }
        }
        solrQuery.setStart((vo.getPageNo()-1)*vo.getPageSize());
        solrQuery.setRows(vo.getPageSize());

        QueryResponse response = client.query(solrQuery);
        Integer total = Math.toIntExact(response.getResults().getNumFound());

        List<ItripHotelVO> voList = response.getBeans(ItripHotelVO.class);
        Page<ItripHotelVO> page = new Page<ItripHotelVO>(vo.getPageNo(),vo.getPageSize(),total);
        page.setRows(voList);
        return page;

好博客就要一起分享哦!分享海报

此处可发布评论

评论(1展开评论

蓝色妖姬 能力:10

2023-02-21 11:30:16

太难了
点击查看更多评论

展开评论

您可能感兴趣的博客

客服QQ 1913284695