黑马程序员技术交流社区

标题: 【郑州校区】Java的新项目学成在线笔记-day11(八) [打印本页]

作者: 谷粒姐姐    时间: 2019-5-7 15:47
标题: 【郑州校区】Java的新项目学成在线笔记-day11(八)
4.4.2 按分类和难度等级搜索
按分类和难度等级搜索代码如下:
[AppleScript] 纯文本查看 复制代码
@Service public class EsCourseService {  
   private static final Logger LOGGER = LoggerFactory.getLogger(EsCourseService.class);   
    @Value("${xuecheng.elasticsearch.course.index}")  
   private String es_index;   
  @Value("${xuecheng.elasticsearch.course.type}")   
private String es_type;

[AppleScript] 纯文本查看 复制代码
@Value("${xuecheng.elasticsearch.course.source_field}")
     private String source_field;     
  @Autowired   
  RestHighLevelClient restHighLevelClient;   
   public QueryResponseResult<CoursePub> list(int page,int size,CourseSearchParam  courseSearchParam)  {   
        //设置索引     
    SearchRequest searchRequest = new SearchRequest(es_index);   
     //设置类型     
    searchRequest.types(es_type);   
     SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();     
    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();      
   //source源字段过虑  
       String[] source_fields = source_field.split(",");     
    searchSourceBuilder.fetchSource(source_fields, new String[]{});     
    //关键字      
   if(StringUtils.isNotEmpty(courseSearchParam.getKeyword())){      
       //匹配关键字     
        MultiMatchQueryBuilder multiMatchQueryBuilder =  QueryBuilders.multiMatchQuery(courseSearchParam.getKeyword(), "name",  "teachplan","description");      
       //设置匹配占比         
    multiMatchQueryBuilder.minimumShouldMatch("70%");     
        //提升另个字段的Boost值        
     multiMatchQueryBuilder.field("name",10);      
       boolQueryBuilder.must(multiMatchQueryBuilder);
        }        
//过虑     
    if(StringUtils.isNotEmpty(courseSearchParam.getMt())){      
       boolQueryBuilder.filter(QueryBuilders.termQuery("mt",courseSearchParam.getMt()));  
       }      
   if(StringUtils.isNotEmpty(courseSearchParam.getSt())){   
         boolQueryBuilder.filter(QueryBuilders.termQuery("st",courseSearchParam.getSt()));  
       }        
if(StringUtils.isNotEmpty(courseSearchParam.getGrade())){         
     boolQueryBuilder.filter(QueryBuilders.termQuery("grade",courseSearchParam.getGrade()));     
    }   
     //布尔查询      
   searchSourceBuilder.query(boolQueryBuilder);      
     //请求搜索         searchRequest.source(searchSourceBuilder);   
     SearchResponse searchResponse = null;     
    try {      
      searchResponse = restHighLevelClient.search(searchRequest);   
     } catch (IOException e) {     
        e.printStackTrace();      
       LOGGER.error("xuecheng search error..{}",e.getMessage());
            return new QueryResponseResult(CommonCode.SUCCESS,new QueryResult<CoursePub>());

[AppleScript] 纯文本查看 复制代码
 }      
     //结果集处理
         SearchHits hits = searchResponse.getHits();      
  SearchHit[] searchHits = hits.getHits();   
      //记录总数      
   long totalHits = hits.getTotalHits();   
      //数据列表     
    List<CoursePub> list = new ArrayList<>();   
       for (SearchHit hit : searchHits) {     
        CoursePub coursePub = new CoursePub();   
           //取出source         
   Map<String, Object> sourceAsMap = hit.getSourceAsMap();   
           //取出名称         
   String name = (String) sourceAsMap.get("name");     
                    coursePub.setName(name);        
     //图片      
      String pic = (String) sourceAsMap.get("pic");   
          coursePub.setPic(pic);     
        //价格      
      Float price = null;     
        try {      
           if(sourceAsMap.get("price")!=null ){        
             price = Float.parseFloat((String) sourceAsMap.get("price"));      
           }        
       } catch (Exception e) {   
             e.printStackTrace();   
          }      
      coursePub.setPrice(price);     
        Float price_old = null;     
        try {         
        if(sourceAsMap.get("price_old")!=null ){   
                  price_old = Float.parseFloat((String) sourceAsMap.get("price_old"));      
           }      
      } catch (Exception e) {     
            e.printStackTrace();   
         }        
     coursePub.setPrice_old(price_old);     
          list.add(coursePub);   
        }      
  QueryResult<CoursePub> queryResult = new QueryResult<>();      
   queryResult.setList(list);  
       queryResult.setTotal(totalHits);      
  QueryResponseResult<CoursePub> coursePubQueryResponseResult = new  QueryResponseResult<CoursePub>(CommonCode.SUCCESS,queryResult);
        return coursePubQueryResponseResult;
  }   }








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2