摘要:本篇文章探讨了大数据技术之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
"
本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号