在全文检索的应用中必然要涉及到高亮显示,sorl对高亮进行封装,高亮的实现方式如下:
1:solrconfig.xml配置
- <formatter name="html"
- default="true"
- class="solr.highlight.HtmlFormatter">
- <lst name="defaults">
- <str name="hl.simple.pre"><![CDATA[<font class='highlight'>]]></str>
- <str name="hl.simple.post"><![CDATA[</font>]]></str>
- </lst>
- </formatter>
这种配置方式比较大多数代码中设置封装性好很多。
2:查询代码
- SolrServer solr = new CommonsHttpSolrServer(“solrUrl”);
- //查询对象
- SolrQuery query = new SolrQuery();
- //设置启用高亮,如果返回文本较长可加大setHighlightSnippets变量值比如设置为100.
- query.setHighlight(true).setHighlightSnippets(3);
- //设置合并
- query.setParam("hl.mergeContiguous", "true");
- //设置高亮字段
- query.setParam("hl.fl", "content");
- QueryResponse res = solr.query(query);
- ArrayList result = new ArrayList();
- //获取高亮集合
- Map<String,Map<String,List<String>>> hl = res.getHighlighting();
- SolrDocumentList list = res.getResults();
- //循环匹配高亮集合
- for(SolrDocument sd : list){
- if(hl.get(sd.getFieldValue("key")).get("content") != null){
- String temp = hl.get(sd.getFieldValue("key")).get("content").get(0);
- System.out.println("高亮返回为:" + tempc);
- }
- }
需要注意高亮合并选项,如果不进行合并,hl返回list会被分段,对于单一多值字段content的检索不容易匹配。设置合并后取出高亮后的正文直接返回显示即可。