版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35603331/article/details/79506451
上篇文章介绍了solrj的简单用法,这篇文章进一步介绍一下solr的高亮功能。
高亮的原理其实就是在查询到的结果中,直接在需要高亮的数据前后添加html标签,
从而实现高亮显示。
那么我们只需要设置需要高亮的字段,
同时设置高亮数据前后需要添加的html标签即可。
下面是一次简单高亮查询:
SolrQuery query = new SolrQuery();
query
//设置高亮显示
.setHighlight(true)
//设置需要高亮的字段
.addHighlightField("product_name")
//设置高亮字段前添加的标签
.setHighlightSimplePre("<em style=\"color:#ff6600\">")
//设置高亮字段后添加的标签
.setHighlightSimplePost("</em>");
查询后,solrj会返回一个结构如下的Map作为高亮结果。
Map<String, Map<String, List<String>>> highLightMap = response.getHighlighting();
这个map实际上是一个id->每条数据的数据结构,
每条数据又是一个结构为
Map<String, List<String>>
的Map,这个Map里保存了每个需要高亮字段的高亮结果,
因此我们只需要根据每条数据的id找到这条数据的高亮Map,
再从这个高亮map里取出相应高亮字段的结果,替换进查询结果中即可。
下面是处理高亮结果的过程
try
{
//查询
QueryResponse response = solrserver.query(query);
//获取查询结果列表
SolrDocumentList list = response.getResults();
//获取高亮结果!
Map<String, Map<String, List<String>>> highLightMap = response.getHighlighting();
Map<String, List<String>> map = null;
String fieldName = "product_name";
for (SolrDocument solrDocument : list)
{
//根据每条数据的id获取其高亮处理后的数据
map = highLightMap.get(solrDocument.getFieldValue("id"));
solrDocument.setField(fieldName, map.get(fieldName).get(0));
//获取想要的字段
System.out.println("高亮后的字段值:"+solrDocument.getFieldValue(fieldName));
}
} catch (SolrServerException e)
{
e.printStackTrace();
}
最后附上控制台打印的结果
ps:如下代码中,get(0)获得的就是相应字段的高亮结果,不知道这个list在什么情况下里面会有多个结果,如果有朋友知道还望赐教
//根据每条数据的id获取其高亮处理后的数据
map = highLightMap.get(solrDocument.getFieldValue("id"));
solrDocument.setField(fieldName, map.get(fieldName).get(0));