版本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);
- }
- }
- }