solrj高亮功能简单应用

上篇文章介绍了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));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值