Solr搜索引擎(6)搜索结果高亮

1、设置高亮

SolrQuery query = new SolrQuery();
...
//高亮
query.setHighlight(true);
//设置需要高亮的字段
query.addHighlightField("path");
query.addHighlightField("content");
//设置高亮字段中匹配内容的前缀和后缀,实现HTML高亮显示
query.setHighlightSimplePre("<font color='red'>");
query.setHighlightSimplePost("</font>");
/**
 * 高亮摘要的段数,默认为1
 * 大于1时,返回多个包含关键字的摘要段落
 * 等于1时,只返回包含关键字最多的段落
 */
query.setHighlightSnippets(3);
/**
 * 摘要段落的长度,默认100
 */
query.setHighlightFragsize(75);

2、获取高亮

QueryResponse queryResponse = solr.query(query);
SolrDocumentList results = queryResponse.getResults();

Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
for(SolrDocument solrDocument : results){

    //自定义的pojo类
    TXDocument document = new TXDocument();
    document.setId(solrDocument.get("id").toString());

    //高亮匹配结果
    Map<String, List<String>> map = highlighting.get(solrDocument.get("id"));

    // 获取path字段。如果path字段有高亮匹配,则获取高亮匹配结果;否则获取全部内容
    if(map.get("path") != null){
        document.setPath(map.get("path").toString());
    } else {
        document.setPath(solrDocument.get("path").toString());
    }

    // 获取内content字段。如果content字段有高亮匹配,则获取高亮匹配结果;否则获取前75个字的内容
    String matchContents = "";
    List<String> list = map.get("content");
    if(list != null){
        for(int i=0;i<list.size();i++){
            if(i != 0){
                matchContents += " . . . ";
            }
            matchContents += list.get(i);
        }
    } else {
        String docContent = solrDocument.get("content").toString();
        matchContents = (docContent.length() > 75?docContent.substring(0, 75):docContent);
    }
    document.setContent(matchContents);
}

3、效果

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值