• solr 7.x 查询及高亮


    查询时的api分为两种一种是万能的set,还有一种是setxxxquery

     1     @Test
     2     public void search2() throws Exception{
     3         HttpSolrClient solrClient  = new HttpSolrClient.Builder("http://127.0.0.1:8080/solr/solrcore1").build();
     4         SolrQuery query = new SolrQuery();
     5         query.set("q","test001");
     6         
     7         
     8         //1.过滤器
     9         query.set("fq","pprice:[1 TO 100]");//query.setFilterQueries("pprice:[1 TO 100]");也可以用addFiterQuries设置多过滤条件
    10         
    11         //2.排序
    12         query.set("sort","pprice desc,id asc");//query.setSort("pprice",ORDER.desc);  addSort
    13         
    14         
    15         //3.设置查询到的文档返回的域对象
    16         query.set("fl","id,pname,pprice");//query.setFields("id,pname");
    17         
    18         //4.设置默认查询的域
    19         query.set("df","pname");
    20         
    21         //5.分页
    22         query.set("start",0);  //query.setStart(0)
    23         query.set("rows",5);   //query.setRows(5)
    24         
    25         //6.高亮
    26         query.set("hl",true);
    27         //设置高亮域(设置的域必须在查询条件中存在)
    28         query.set("h1.fl","pname","pprice");
    29         //前缀
    30         query.set("hl.simple.pre","<em style='color:red'>");
    31         //后缀
    32         query.set("hl.simple.post","</em>");
    33         
    34         /*query.setHighlight(true);
    35         query.addHighlightField("pname");
    36         query.setHighlightSimplePre("<em style='color:red'>");
    37         query.setHighlightSimplePost("</em>");*/
    38 
    39         
    40         QueryResponse response = solrClient.query(query);
    41         SolrDocumentList results = response.getResults();
    42         //k是id,内部的map的key是域名,其value是高亮的值集合
    43         Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
    44         System.out.println("匹配的结果总数是-------"+results.getNumFound());
    45         for(SolrDocument document:results) {
    46             System.out.println("id----" + document.get("id"));
    47             System.out.println("pname-----" + document.get("pname"));
    48             System.out.println("pprice------" + document.get("pprice"));
    49             List<String> list = null;
    50             if(highlighting.get(document.get("id")) != null) {
    51                list = highlighting.get(document.get("id")).get("pname");
    52             }else {
    53                 System.out.println("无法获取高亮map");
    54             }
    55             
    56             if (list != null && list.size() > 0) {
    57                 System.out.println("高亮显示的内容:----"+list.get(0));
    58             }else {
    59                 System.out.println("高亮显示的内容为空!!!");
    60             }
    61             System.out.println("=========================");
    62         }
    63     }

    可以看到查询时用的set(xxx)与solrAdmin页面的查询界面想对应

    关于高亮:

    1.首先高亮的域必须出现在查询条件中,如果你设置了返回域,请把要高亮的域对象包含其中

    2.高亮的域对象必须在solrconfig中必须设置其stored为true

    3.高亮的数据结构如下图所示

    可以看到是map中镶嵌着map,外层map的key是匹配到的document对象的id,其value是一个map,这个map的key才是设置的高亮的域对象名称,value中包含着高亮的内容

  • 相关阅读:
    python—Celery异步分布式
    python 安装虚拟环境步骤
    同源策略:
    git 的用法和命令
    一分钟搞定AlloyTouch图片轮播
    JavaScript学习总结(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
    CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化
    移动前端UI选择
    你必须收藏的Github技巧
    HTML5 学习笔记(二)——HTML5新增属性与表单元素
  • 原文地址:https://www.cnblogs.com/tele-share/p/9231713.html
Copyright © 2020-2023  润新知