黑马程序员技术交流社区

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

作者: 谷粒姐姐    时间: 2019-5-7 15:52
标题: 【郑州校区】Java的新项目学成在线笔记-day11(九)
.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







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