solrj高亮功能簡單應用

上篇文章介紹了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));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章