java连接solr并设置高亮域

3 篇文章 0 订阅

关于springboot 和solr 的集成可以看我另一篇文章

我的solr里主要存的是法条,有如下几个域

id,law_title,law_content

其中title和content组成一个复制域,law_keywords

下面是我的service层的代码

public SearchResult search(String keyword, int page, int rows) throws IOException, SolrServerException {
        SolrQuery query = new SolrQuery();
        query.setQuery(keyword);
        if (page<=0) {
            page=1;
        }
        query.setStart((page - 1) * rows);
        query.setRows(rows);
        query.set("df", "law_keywords");
        query.setHighlight(true);
        query.addHighlightField("law_title");
        query.addHighlightField("law_content");
        query.setHighlightSimplePre("<em style=\"color:red\">");
        query.setHighlightSimplePost("</em>");
        query.setHighlightFragsize(2147483647);
        SearchResult searchResult = null;
        searchResult = searchDao.search(query);
        long recordCount = searchResult.getRecordCount();
        int totalPage = (int)(recordCount/rows);
        if (recordCount % rows >0) {
            totalPage++;
        }
        searchResult.setTotalPages(totalPage);
        return searchResult;
    }

其中df表示的是default field ,默认查哪个域

我默认搜索的是law_title和law_content组成的复制域law_keywords

setHighightFragsize 是设置solr的最大查询字符串,这个默认是100,也就是100字符之后将不再显示

setHighlightSimplePre 和post是设置高亮域的前后缀,如果想在网页上显示成红色效果就套上一个em标签

下面是dao代码

public SearchResult search(SolrQuery query) throws IOException, SolrServerException {
        QueryResponse queryResponse = solrClient.query(query);
        SolrDocumentList solrDocumentList = queryResponse.getResults();
        long numFound = solrDocumentList.getNumFound();
        SearchResult result  = new SearchResult();
        result.setRecordCount(numFound);
        Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
        List<Law> lawList = new ArrayList<>();
        for (org.apache.solr.common.SolrDocument solrDocument : solrDocumentList) {
            Law law = new Law();
            System.out.println();
            int id = Integer.valueOf((String) solrDocument.get("id"));
            law.setId(id);
            law.setContent((String) solrDocument.get("law_content"));
            List<String> titleList= highlighting.get(solrDocument.get("id")).get("law_title");
            List<String> contentList= highlighting.get(solrDocument.get("id")).get("law_content");
            String title="";
            String content = "";
            if (titleList !=null && titleList.size()>0) {
                title = titleList.get(0);
            }else {
                title = (String) solrDocument.get("law_title");
            }
            if (contentList !=null && contentList.size()>0) {
                content = contentList.get(0);
            }else {
                content = (String) solrDocument.get("law_content");
            }
            law.setTitle(title);
            law.setContent(content);
            lawList.add(law);
        }
        result.setItemList(lawList);
        return result;
    }

这里我把law_title以及law_content都设置为高亮域

@Test
    public void testSearch() throws IOException, SolrServerException {
        SearchResult searchResult = searchService.search("文物盗窃", 1, 10);
        List<Law> list = searchResult.getItemList();
        for (Law law : list) {
            System.out.println(law.getTitle());
            System.out.println(law.getContent());
        }
    }

最后写一个测试类进行测试


可以看到title 和content的关键字都被打上了em标签

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值