A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

.4.3 分页与高亮
[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;   
  @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())){

[AppleScript] 纯文本查看 复制代码
 boolQueryBuilder.filter(QueryBuilders.termQuery("st",courseSearchParam.getSt()));         }         if(StringUtils.isNotEmpty(courseSearchParam.getGrade())){              boolQueryBuilder.filter(QueryBuilders.termQuery("grade",courseSearchParam.getGrade()));   
      }      
   //分页    
     if(page<=0){     
        page = 1;      
   }      
   if(size<=0){     
        size = 20;  
       }      
   int start = (page‐1)*size;   
      searchSourceBuilder.from(start);  
       searchSourceBuilder.size(size);     
    //布尔查询    
     searchSourceBuilder.query(boolQueryBuilder);       
  //高亮设置       
  HighlightBuilder highlightBuilder = new HighlightBuilder();   
      highlightBuilder.preTags("<font class='eslight'>");    
     highlightBuilder.postTags("</font>");      
   //设置高亮字段    
     highlightBuilder.fields().add(new HighlightBuilder.Field("name"));   
      searchSourceBuilder.highlighter(highlightBuilder);    
     //请求搜索         
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();       
        //取出名称        
     String name = (String) sourceAsMap.get("name");
            //取出高亮字段内容

[AppleScript] 纯文本查看 复制代码
 Map<String, HighlightField> highlightFields = hit.getHighlightFields();     
        if(highlightFields!=null){        
         HighlightField nameField = highlightFields.get("name");     
            if(nameField!=null){                
     Text[] fragments = nameField.getFragments();        
             StringBuffer stringBuffer = new StringBuffer();            
         for (Text str : fragments) {      
                   stringBuffer.append(str.string());         
            }               
      name = stringBuffer.toString();          
         }         
    }       
      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;   
  }   }

4.5 Controller
[AppleScript] 纯文本查看 复制代码
@RestController @RequestMapping("/search/course") public class EsCourseController implements EsCourseControllerApi {     @Autowired  
   EsCourseService esCourseService;    
      @Override   
  @GetMapping(value="/list/{page}/{size}")  
   public QueryResponseResult<CoursePub> list(@PathVariable("page") int page,  @PathVariable("size") int size, CourseSearchParam courseSearchParam) throws IOException {        
 return esCourseService.list(page,size,courseSearchParam);  
   } }

4.5 测试
使用postman测试/search/course


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马