SpringDataSolr获取和替换高亮数据

1.构造高亮查询对象HighlightQuery,它Query接口的子接口

HighlightQuery query = new SimpleHighlightQuery();
//查询solr中自定义的复制域,匹配传过来的关键字
Criteria criteria = new Criteria("item_keywords").is(searchMap.get("keywords"));	
query.addCriteria(criteria);

2.构件高亮选项对象

HighlightOptions highlightOptions = new HighlightOptions();
//设置高亮显示的域,可以设置多个,在后面接.addField("")即可
highlightOptions.addField("item_title");							
highlightOptions.setSimplePrefix("<em style='color:red'>");			//设置高亮显示前缀
highlightOptions.setSimplePostfix("</em>");							//设置高亮显示后缀
query.setHighlightOptions(highlightOptions);						//为查询对象设置高亮选项

3.进行高亮查询,并且替换高亮数据

//进行高亮查询,得到高亮页对象
HighlightPage<TbItem> page = solrTemplate.queryForHighlightPage(query, TbItem.class);

//从page中获取高亮数据的入口的集合,也就是能获取高亮部分的数据和普通的数据
List<HighlightEntry<TbItem>> entryList = page.getHighlighted();

//遍历entryList,里面有每一条数据的普通数据和高亮数据
for (HighlightEntry<TbItem> entry : entryList) {
	
	//获取这个entry的高亮列表list(list的大小取决于前面设置的高亮域的数量)
	List<Highlight> highlights = entry.getHighlights();
	
	//遍历highlights,得到每一个Highlight对象
	for (Highlight h : highlights) {
		List<String> sns = h.getSnipplets();		//得到高亮域的内容,返回一个list,是因为可能一个域中会存储多个值,比如说复制域
		System.out.println(sns);
	}
	
	//获取该条记录的普通数据
	TbItem item = entry.getEntity();
	
	//将高亮数据设置到普通数据对应的域里面(我这里值设置了一个域,且域里面的值存储一个值,所以默认取list中第一个元素)
	if(highlights.size() >0 && highlights.get(0).getSnipplets() != null && highlights.get(0).getSnipplets().size() > 0){
		String title = highlights.get(0).getSnipplets().get(0);
		item.setTitle(title);
	}
}

//返回数据
map.put("rows", page.getContent());

//返回
return map;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值