大数据技术之Java的新项目学习笔记(84)
沉沙 2019-06-06 来源 : 阅读 954 评论 0

摘要:本篇文章探讨了大数据技术之Java的新项目学习笔记(84),希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章探讨了大数据技术之Java的新项目学习笔记(84),希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

大数据技术之Java的新项目学习笔记(84)

"

4.3 分页与高亮
[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  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())){[/mw_shl_code]
[mw_shl_code=applescript,true] 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"");
//取出高亮字段内容
[/mw_shl_code]
[mw_shl_code=applescript,true] 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;  
}   }[/mw_shl_code]
4.5 Controller
[mw_shl_code=applescript,true]@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);  
} }
[/mw_shl_code]
4.5 测试
使用postman测试/search/course

大数据技术之Java的新项目学习笔记(84)

"

本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程