05、solr学习-solr按照关键字搜素并高亮显示-基于solr搜素引擎

Solr高亮设置步骤
第一步: 详见程序代码

 /**
     *
     * @param query
     *            查询关键字
     * @param filterQuery
     *            过滤条件
     * @param highlightField
     *            高亮字段
     * @return
     */
    public static SolrQuery makeParams(String query, String filterQuery, String highlightField) {

        SolrQuery params = new SolrQuery();
        // 设置查询条件
        if (!StringUtils.isBlank(query)) {
            params.setQuery(query);
        }
        // 设置查询条件,OR可以连接多个不同条件的查询
        if (!StringUtils.isBlank(filterQuery)) {
            params.addFilterQuery(filterQuery);
        }
        // 设置排序规则
        params.setSort("id", ORDER.desc);
        // 开启高亮显示
        params.setHighlight(true);
        // 给字段wareName开启了高亮
        params.addHighlightField(highlightField);
        // 给高亮的关键字前后添加HTML代码
        params.setHighlightSimplePre("<font color=\"red\">");
        params.setHighlightSimplePost("</font>");
        return params;
    }

    public static SolrDocumentList queryIndex(SolrParams params) {

        SolrDocumentList documentList = null;
        HttpSolrServer solr = null;
        // key:schema.xml中设置的Id,value:该Id对应的document的值,其中Value也为一个Map(Map的Key为fieldName,Value为List<String>,
        //这个List里面的内容就是该文档的高亮字段)
        Map<String, Map<String, List<String>>> highlighting = null;
        try {
            solr = SolrClientUtil.getInstance();
            QueryResponse response = solr.query(params);
            documentList = response.getResults();
            // 声明获取高亮的内容变量
            highlighting = response.getHighlighting();
            // documentList文档中的内容对wareName进行高亮显示,获取对应的高亮的内容,替换掉原来的内容
            for(SolrDocument doc:documentList) {
                //获取document中的id
                String id = doc.getFieldValue("id").toString();
                //获取当前id对应的高亮的文档
                Map<String, List<String>> highlighMap = highlighting.get(id);
                //获取document中的id对应的wareName,并对当前内容wareName重新赋值
                doc.setField("wareName", highlighMap.get("wareName"));
            }
        } catch (Exception e) {
            logger.error(" queryIndex data to solr server is exception ", e);
        }
        return documentList;

    }

solr的高亮显示通过params.setHighlight(true);设置,lucene中是通过highlighter来操作高亮和摘要的,hl是hightlight的简写
参考文章:http://501565246-qq-com.iteye.com/blog/1855675
第二步: 介绍lucene中在solrconfig.xml中通过highlighter配置

<requestHandler name="search" class="solr.SearchHandler" default="true">
<!-- default values for query parameters can be specified, these  
will be overridden by parameters in the request  
\-->  
<lst name="defaults">  
<str name="echoParams">explicit</str>  
<int name="rows">10</int>  
<str name="df">text</str>  
<str name="hl">true</str>  
<str name="hl.fl">wareName</str>  
<str name="f.name.hl.fragsize">50</str>  
<str name="hl.simple.pre"><font color="red></str>  
<str name="hl.simple.post"></font></str>  
</lst>  
</requestHandler>  

属性参数说明:
http://ronxin999.blog.163.com/blog/static/42217920201292951457295/

/home/admin/solr/solr3home/conf/solrconfig.xml中的高亮显示的内容:

<formatter name="html"  
default="true"  
class="solr.highlight.HtmlFormatter">  
<lst name="defaults">  
<str name="hl.simple.pre"><!\[CDATA\[<em>\]\]></str>  
<str name="hl.simple.post"><!\[CDATA\[</em>\]\]></str>  
</lst>  
</formatter>

solr按照关键字搜素并高亮显示