版本solr-4.10.1中,不用配置文件设置高亮,而用solrj设置高亮。注意高亮的字段field必须设置storeOffsetsWithPositions="true",否则高亮异常:field 'dkeys' was indexed without offsets, cannot highlight。
很多老代码都是这么写,结论是:设置的css样式无效,默认成了<em></em>样式,高亮效果是字体斜体。
- params.add(HighlightParams.FIELDS, hls);
- params.set(HighlightParams.HIGHLIGHT, true);
- params.set(HighlightParams.SIMPLE_PRE, "<font color=\'red\'");或者red不用加单引号其实就可以不需要转义
- params.set(HighlightParams.SIMPLE_POST, "</font>");
查了solrj官方资料这么写的:
- hl.simple.pre/hl.simple.post
- The text which appears before and after a highlighted term when using the simple formatter. This parameter accepts per-field overrides.
- 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)
后来改成这样的代码,则设置的高亮效果有效:
- params.add(HighlightParams.FIELDS, hls);
- params.set(HighlightParams.HIGHLIGHT, true);
- params.set(HighlightParams.SNIPPETS, snippets);
- params.set(HighlightParams.TAG_PRE, "<font color=\'red\'>");
- params.set(HighlightParams.TAG_POST, "</font>");
结果显示代码:
- Map<String,Map<String,List<String>>> hl = response.getHighlighting();
- //循环匹配title领域高亮集合
- SolrDocumentList list = response.getResults();
- for(SolrDocument sd : list){
- System.out.println("-------------------------------------------");
- List<String> highightSnippets = hl.get(sd.getFieldValue("id")).get("title");
- if(highightSnippets != null){
- for(int k =0 ; k < highightSnippets.size() ;k++){
- String temp = highightSnippets.get(k);
- System.out.println("title高亮返回为:" + temp);
- }
- }
- }
摘自http://blog.csdn.net/qing419925094/article/details/41348745