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按照关键字搜素并高亮显示