solrj7.5实现查询数据并且高亮显示

前面给大家讲了如何搭建solr服务器,在这里给大家讲解如何在java端查询数据并且高亮显示

先给大家看效果

solrj7.5实现查询数据并且高亮显示

 

给大家贴数据的关键代码

/**
     * 查询数据
     *
     * @param title
     * @return
     * @throws IOException
     * @throws SolrServerException
     */
    public Map<String, Object> findBolgs(String title, PageBean pageBean) throws IOException, SolrServerException {
        String solrUrl = "http://127.0.0.1:8983/solr/new_core";
        HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build();
        // 创建搜索对象
        SolrQuery query = new SolrQuery();
        // 设置搜索条件
        if (StringUtils.isNotBlank(title)) {
            query.set("q", "title:" + title);
            query.setHighlight(true); // 开启高亮组件或用query.setParam("hl", "true");
            query.addHighlightField("title");// 高亮字段
            query.setHighlightSimplePre("<font color='red'>");//标记,高亮关键字前缀
            query.setHighlightSimplePost("</font>");//后缀
        }else{
            query.set("q", "title:*");
        }

        //设置返回数据为json格式
        query.set("wt", "json");
        // 分页参数
        query.setStart(pageBean.getStartIndex());
        // 设置每页显示多少条
        query.setRows(pageBean.getRows());

        //发起搜索请求
        QueryResponse response = solrClient.query(query);
        // 查询结果
        SolrDocumentList docs = response.getResults();
        // 查询结果总数
        long count = docs.getNumFound();
         //高亮集合
        Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
      //高亮集合不为空的话把普通字段替换为高亮字段
       if(highlighting!=null) {
           List<Map<String, Object>> list = new ArrayList<>();
           Map<String, Object> maps;
           for (int i = 0; i < docs.size(); i++) {
               maps = new HashMap<>();
               List<String> strings = highlighting.get(docs.get(i).get("id")).get("title");
               maps.put("id", docs.get(i).get("id"));
               maps.put("orUrl", docs.get(i).get("orUrl"));
               maps.put("title", strings.get(0));
               list.add(maps);
           }
           Map<String, Object> map = new HashMap<>();
           map.put("doc", list);
           map.put("count", count);
           solrClient.close();
           return map;
       }else{
           Map<String, Object> map = new HashMap<>();
           map.put("doc", docs);
           map.put("count", count);
           solrClient.close();
           return map;
       }



    }

这里再给大家贴一个简单使用的代码

/ solr服务器的地址
String solrUrl = "http://127.0.0.1:8983/solr/new_core";
HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build();
// 创建搜索对象
SolrQuery query = new SolrQuery();
// 设置搜索条件这里很多操作都可以使用set完成那些参数参照后台参数介绍
query.set("q", "title:虚拟机");
query.setHighlight(true); // 开启高亮组件或用query.setParam("hl", "true");
query.addHighlightField("title");// 设置高亮字段
query.setHighlightSimplePre("<font color='red'>");//标记,高亮关键字前缀
query.setHighlightSimplePost("</font>");//后缀

//设置返回数据为json格式
query.set("wt", "json");
// 分页参数
query.setStart(0);
// 设置每页显示多少条
query.setRows(10);
//发起搜索请求
QueryResponse response = solrClient.query(query);
// 查询结果
SolrDocumentList docs = response.getResults();
// 查询结果总数
long count = docs.getNumFound();
// 高亮结果
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
Set<String> strings = highlighting.keySet();
for (String s : strings) {
    Map<String, List<String>> stringListMap = highlighting.get(s);
    System.out.println(stringListMap);
}
System.out.println("总条数为" + count + "条");
for (SolrDocument doc : docs) {
    System.out.println("id:" + doc.get("id") + ",title:" + doc.get("title"));
}
solrClient.close();

 

 关于solr的安装和配置大家可以去看我之前的博客

https://blog.csdn.net/yjt520557/article/details/85324431

https://blog.csdn.net/yjt520557/article/details/85326208