4.3 API

[mw_shl_code=applescript,true]@Api(value = "课程搜索",description = "课程搜索",tags = {"课程搜索"}) public interface EsCourseControllerApi {       @ApiOperation("课程搜索")     public QueryResponseResult<CoursePub> list(int page,int size,                        CourseSearchParam courseSearchParam) throws IOException;   }
[/mw_shl_code]
4.4 Service 
Service方法代码复杂,这里分三步完成。 4.4.1 按关键字搜索 
1)在appliction.yml中配置source_field

[mw_shl_code=applescript,true]elasticsearch:  
hostlist: 127.0.0.1:9200 #多个结点中间用逗号分隔 
  course:   
  index: xc_course 
    type: doc   
  source_field:  id,name,grade,mt,st,charge,valid,pic,qq,price,price_old,status,studymodel,teachmode,expires,pub_ time,start_time,end_time[/mw_shl_code]
2)service完整代码如下 
[mw_shl_code=applescript,true]@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;   
  @Value("${xuecheng.elasticsearch.course.source_field}")    
private String source_field;     
  @Autowired    
RestHighLevelClient restHighLevelClient;  
    public QueryResponseResult<CoursePub> list(int page,int size,CourseSearchParam 
[/mw_shl_code]
[mw_shl_code=applescript,true]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);      
   }            
      //布尔查询    
     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>());      
   }       
    //结果集处理    
     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();  
            //取出名称
[/mw_shl_code]
[mw_shl_code=applescript,true] 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;  
   }   }
[/mw_shl_code]