上篇文章介紹了solrj的簡單用法,這篇文章進一步介紹一下solr的高亮功能。
高亮的原理其實就是在查詢到的結果中,直接在需要高亮的數據前後添加html標籤,
從而實現高亮顯示。
那麼我們只需要設置需要高亮的字段,
同時設置高亮數據前後需要添加的html標籤即可。
下面是一次簡單高亮查詢:
SolrQuery query = new SolrQuery();
query
//設置高亮顯示
.setHighlight(true)
//設置需要高亮的字段
.addHighlightField("product_name")
//設置高亮字段前添加的標籤
.setHighlightSimplePre("<em style=\"color:#ff6600\">")
//設置高亮字段後添加的標籤
.setHighlightSimplePost("</em>");
查詢後,solrj會返回一個結構如下的Map作爲高亮結果。
Map<String, Map<String, List<String>>> highLightMap = response.getHighlighting();
這個map實際上是一個id->每條數據的數據結構,
每條數據又是一個結構爲
Map<String, List<String>>
的Map,這個Map裏保存了每個需要高亮字段的高亮結果,
因此我們只需要根據每條數據的id找到這條數據的高亮Map,
再從這個高亮map裏取出相應高亮字段的結果,替換進查詢結果中即可。
下面是處理高亮結果的過程
try
{
//查詢
QueryResponse response = solrserver.query(query);
//獲取查詢結果列表
SolrDocumentList list = response.getResults();
//獲取高亮結果!
Map<String, Map<String, List<String>>> highLightMap = response.getHighlighting();
Map<String, List<String>> map = null;
String fieldName = "product_name";
for (SolrDocument solrDocument : list)
{
//根據每條數據的id獲取其高亮處理後的數據
map = highLightMap.get(solrDocument.getFieldValue("id"));
solrDocument.setField(fieldName, map.get(fieldName).get(0));
//獲取想要的字段
System.out.println("高亮後的字段值:"+solrDocument.getFieldValue(fieldName));
}
} catch (SolrServerException e)
{
e.printStackTrace();
}
最後附上控制檯打印的結果
ps:如下代碼中,get(0)獲得的就是相應字段的高亮結果,不知道這個list在什麼情況下里面會有多個結果,如果有朋友知道還望賜教
//根據每條數據的id獲取其高亮處理後的數據
map = highLightMap.get(solrDocument.getFieldValue("id"));
solrDocument.setField(fieldName, map.get(fieldName).get(0));