老师下面的代码两层for循环的逻辑不是十分理解。
为什么要做if(highlight.getField().getName().equals("item_title")) 然后进行searchPojo.setTitle(highlight.getSnipplets().get(0));?searchPojo本身没有item_title吗
另外field有item_title和item_sell_point, item_sell_point不管了?
// 高亮条件
HighlightOptions hlOptions = new HighlightOptions();
hlOptions.setSimplePrefix("<span style='color:red'>");
hlOptions.setSimplePostfix("</span>");
hlOptions.addField("item_title item_sell_point");
query.setHighlightOptions(hlOptions);
// 相当于可视化界面点击查询按钮得出的总体值
HighlightPage<SearchPojo> hlPage = solrOperations.queryForHighlightPage("ego", query, SearchPojo.class);
// 取出包含高亮的数据
List<HighlightEntry<SearchPojo>> highlighted = hlPage.getHighlighted();
// 创建一个集合,集合放所有查询到的数据,对应页面中
List<SearchPojo> listResult = new ArrayList<>();
for(HighlightEntry<SearchPojo> hlEntity : highlighted){
// 非高亮数据,相当于可视化界面中docs
SearchPojo searchPojo = hlEntity.getEntity();
// 把从solr中取出的image转换为images
String image = searchPojo.getImage();
searchPojo.setImages(image!=null&&!image.equals("")?image.split(","):new String[1]);
// 高亮数据,相当于可视化界面中highlighting
List<HighlightEntry.Highlight> listHL = hlEntity.getHighlights();
for(HighlightEntry.Highlight highlight : listHL){
// 当前这个对象item_title包含高亮数据
if(highlight.getField().getName().equals("item_title")){
// 替换普通数据
searchPojo.setTitle(highlight.getSnipplets().get(0));
}
}
// 把处理完的包含高亮数据的对象放入到集合中
listResult.add(searchPojo);
}