solrj 高亮显示

来源:互联网 发布:膜法师知乎事件 编辑:程序博客网 时间:2024/05/22 08:29

版本solr-4.10.1中,不用配置文件设置高亮,而用solrj设置高亮。注意高亮的字段field必须设置storeOffsetsWithPositions="true"否则高亮异常:field 'dkeys' was indexed without offsets, cannot highlight。

很多老代码都是这么写,结论是:设置的css样式无效,默认成了<em></em>样式,高亮效果是字体斜体。

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. params.add(HighlightParams.FIELDS, hls);  
  2. params.set(HighlightParams.HIGHLIGHT, true);  
  3.       params.set(HighlightParams.SIMPLE_PRE, "<font color=\'red\'");或者red不用加单引号其实就可以不需要转义  
  4.       params.set(HighlightParams.SIMPLE_POST, "</font>");  

查了solrj官方资料这么写的:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. hl.simple.pre/hl.simple.post  
  2.   
  3. The text which appears before and after a highlighted term when using the simple formatter. This parameter accepts per-field overrides.  
  4.   
  5. The default values are "<em>" and "</em>" This parameter makes sense for the original Highlighter only. Use hl.tag.pre and hl.tag.post for FastVectorHighlighter (see example under hl.fragmentsBuilder)  
This parameter makes sense for the original Highlighter only.



后来改成这样的代码,则设置的高亮效果有效:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. params.add(HighlightParams.FIELDS, hls);  
  2.             params.set(HighlightParams.HIGHLIGHT, true);  
  3.             params.set(HighlightParams.SNIPPETS, snippets);  
  4.             params.set(HighlightParams.TAG_PRE, "<font color=\'red\'>");  
  5.             params.set(HighlightParams.TAG_POST, "</font>");  

结果显示代码:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. Map<String,Map<String,List<String>>> hl = response.getHighlighting();  
  2.         //循环匹配title领域高亮集合  
  3.   
  4.         SolrDocumentList list = response.getResults();   
  5.         for(SolrDocument sd : list){  
  6.             System.out.println("-------------------------------------------");  
  7.             List<String> highightSnippets = hl.get(sd.getFieldValue("id")).get("title");  
  8.             if(highightSnippets != null){  
  9.             for(int k =0 ; k < highightSnippets.size() ;k++){  
  10.                     String temp = highightSnippets.get(k);  
  11.                     System.out.println("title高亮返回为:"  + temp);  
  12.                 }  
  13.             }   
  14. }  




摘自http://blog.csdn.net/qing419925094/article/details/41348745
0 0