solrj高亮功能简单应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 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));

猜你喜欢

转载自blog.csdn.net/qq_35603331/article/details/79506451