solr4.7高亮顯示方法是什么

這篇文章主要講解了“solr4.7高亮顯示方法是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“solr4.7高亮顯示方法是什么”吧!

創(chuàng)新互聯(lián)擁有十年成都網(wǎng)站建設(shè)工作經(jīng)驗(yàn),為各大企業(yè)提供成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)服務(wù),對于網(wǎng)頁設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、App定制開發(fā)、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、程序開發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、域名注冊等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營銷經(jīng)驗(yàn),集策劃、開發(fā)、設(shè)計(jì)、營銷、管理等網(wǎng)站化運(yùn)作于一體,具備承接各種規(guī)模類型的網(wǎng)站建設(shè)項(xiàng)目的能力。

  1. 第一種方式是solrj操作:

 
public SolrDocumentList query(String str) {
    SolrQuery query = new SolrQuery(str);
    
    query.setHighlight(true);//開啟高亮功能  

    query.addHighlightField("name,content");//高亮字段  :多個(gè)域可以用空格或者逗號分隔
    query.setHighlightSimplePre("<font color=red >");//渲染標(biāo)簽  
    query.setHighlightSimplePost("</font>");//渲染標(biāo)簽  
    query.setParam("f.content.hl.fragsize", "200");

    
    QueryResponse qr=server.query(query);//執(zhí)行查詢  
    SolrDocumentList dlist=qr.getResults();  
    
    System.out.println("總數(shù):"+dlist.getNumFound());
    //第一個(gè)Map的鍵是文檔的ID,第二個(gè)Map的鍵是高亮顯示的字段名    
    Map<String, Map<String, List<String>>> map = qr.getHighlighting();    
    for(int i=0;i<dlist.size();i++){  
     SolrDocument d=dlist.get(i);//獲取每一個(gè)document  

     
     Map<String, String> mapRe = new HashMap<String, String>();
     mapRe.put("id", d.get("id").toString());
     if(map.get(d.get("id")).get("name") == null){
      mapRe.put("name", d.getFieldValue("name").toString()+"--"+d.getFieldValue("author").toString()+"-"+d.getFieldValue("theme"));
     }else{
      mapRe.put("name", map.get(d.get("id")).get("name").toString()+"--"+d.getFieldValue("author").toString()+"-"+d.getFieldValue("theme"));
     }
     if(map.get(d.get("id")).get("content") == null){
      mapRe.put("content", d.getFieldValue("content").toString().substring(0,200));
     }else{
      mapRe.put("content", map.get(d.get("id")).get("content").toString());
     }
     list.add(mapRe);
    }     
    return list;
}

2 ) 另外的方法,配置solrconfig.xml

solr是在lucene的基礎(chǔ)上做的開發(fā),那么在某些功能的實(shí)現(xiàn)上,與lucene也會(huì)有相似之處。
solr的高亮顯示(包括自動(dòng)摘要),是通過hl這個(gè)param,以及其相關(guān)變量來實(shí)現(xiàn)的,hl是hightlight的簡寫。lucene中是通過highlighter來操作高亮和摘要的。
 
配置高亮的相關(guān)屬性,是在solrconfig.xml中配置的。在 <requestHandler name="search" class="solr.SearchHandler" default="true">下進(jìn)行配置。solrconfig.xml文件中包含多個(gè)requestHandler的標(biāo)簽,但是只有在上述的名為search的標(biāo)簽中配置才有效?,F(xiàn)將配置的案列公布如下:

 <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">content</str>
        <str name="f.name.hl.fragsize">50</str>
        <str name="hl.simple.pre">&lt;font color=&quot;red&gt;</str>
        <str name="hl.simple.post">&lt;/font&gt;</str>
     </lst>
  </requestHandler>

其中,hl是指定是否使用高亮;hl.fl,指定對哪些域進(jìn)行高亮,對多個(gè)域進(jìn)行高亮的話,好像是用逗號隔開;f.name.hl.fragsize是指摘要的長度,默認(rèn)0代表不做摘要。而hl.simple.pre和hl.simple.post則是指定高亮?xí)r顯示的格式,默認(rèn)是<em></em>。詳細(xì)內(nèi)容請參見:http://wiki.apache.org/solr/HighlightingParameters。設(shè)置完成后,

在solrj中,通過QueryResponse對象的getHighlighting()方法獲得。該方法返回 Map<String,Map<String,List<String>>>類型的數(shù)據(jù)。其中第一個(gè)Map中的key是id,第二個(gè)Map中的key是field,List<String>中封裝的就是高亮與摘要處理過后的內(nèi)容了


 Map<String, Map<String, List<String>>> map = response.getHighlighting();
 
 通過這個(gè)api的方法就可以得到高亮的內(nèi)容,高亮的內(nèi)容通過 key 跟索引的document部分關(guān)聯(lián)起來
 
 這個(gè)key就是document 的id
參數(shù)詳細(xì)說明:

1.hl.fl: 用空格或逗號隔開的字段列表。要啟用某個(gè)字段的highlight功能,就得保證該字段在schema中是stored。如果該參數(shù)未被給出,那么就會(huì)高亮默認(rèn)字段 standard handler會(huì)用df參數(shù),dismax字段用qf參數(shù)。你可以使用星號去方便的高亮所有字段。如果你使用了通配符,那么要考慮啟用hl.requiredFieldMatch選項(xiàng)。
 2.hl.requireFieldMatch: 
如果置為true,除非該字段的查詢結(jié)果不為空才會(huì)被高亮。它的默認(rèn)值是false,意味著它可能匹配某個(gè)字段卻高亮一個(gè)不同的字段。如果hl.fl使用了通配符,那么就要啟用該參數(shù)。盡管如此,如果你的查詢是all字段(可能是使用copy-field 指令),那么還是把它設(shè)為false,這樣搜索結(jié)果能表明哪個(gè)字段的查詢文本未被找到
 3.hl.usePhraseHighlighter: 
如果一個(gè)查詢中含有短語(引號框起來的)那么會(huì)保證一定要完全匹配短語的才會(huì)被高亮。
 4.hl.highlightMultiTerm 
如果使用通配符和模糊搜索,那么會(huì)確保與通配符匹配的term會(huì)高亮。默認(rèn)為false,同時(shí)hl.usePhraseHighlighter要為true。
 5.hl.snippets: 
這是highlighted片段的最大數(shù)。默認(rèn)值為1,也幾乎不會(huì)修改。如果某個(gè)特定的字段的該值被置為0(如f.allText.hl.snippets=0),這就表明該字段被禁用高亮了。你可能在hl.fl=*時(shí)會(huì)這么用。
 6.hl.fragsize: 
每個(gè)snippet返回的最大字符數(shù)。默認(rèn)是100.如果為0,那么該字段不會(huì)被fragmented且整個(gè)字段的值會(huì)被返回。大字段時(shí)不會(huì)這么做。
 7.hl.mergeContiguous: 
如果被置為true,當(dāng)snippet重疊時(shí)會(huì)merge起來。
 8.hl.maxAnalyzedChars: 
會(huì)搜索高亮的最大字符,默認(rèn)值為51200,如果你想禁用,設(shè)為-1
 9.hl.alternateField: 
如果沒有生成snippet(沒有terms 匹配),那么使用另一個(gè)字段值作為返回。
 10.hl.maxAlternateFieldLength: 
如果hl.alternateField啟用,則有時(shí)需要制定alternateField的最大字符長度,默認(rèn)0是即沒有限制。所以合理的值是應(yīng)該為:hl.snippets * hl.fragsize這樣返回結(jié)果的大小就能保持一致。
 12.hl.formatter:一個(gè)提供可替換的formatting算法的擴(kuò)展點(diǎn)。默認(rèn)值是simple,這是目前僅有的選項(xiàng)。顯然這不夠用,你可以看看org.apache.solr.highlight.HtmlFormatter.java 和 solrconfig.xml中highlighting元素是如何配置的。 
注意在不論原文中被高亮了什么值的情況下,如預(yù)先已存在的em tags,也不會(huì)被轉(zhuǎn)義,所以在有時(shí)會(huì)導(dǎo)致假的高亮。
 13.hl.fragmenter: 
這個(gè)是solr制定fragment算法的擴(kuò)展點(diǎn)。gap是默認(rèn)值。regex是另一種選項(xiàng),這種選項(xiàng)指明highlight的邊界由一個(gè)正則表達(dá)式確定。這是一種非典型的高級選項(xiàng)。為了知道默認(rèn)設(shè)置和fragmenters (and formatters)是如何配置的,可以看看solrconfig.xml中的highlight段。 
regex 的fragmenter有如下選項(xiàng):
 14.hl.regex.pattern:正則表達(dá)式的pattern
15.hl.regex.slop:這是hl.fragsize能變化以適應(yīng)正則表達(dá)式的因子。默認(rèn)值是0.6,意思是如果hl.fragsize=100那么fragment的大小會(huì)從40-160.

感謝各位的閱讀,以上就是“solr4.7高亮顯示方法是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對solr4.7高亮顯示方法是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

文章名稱:solr4.7高亮顯示方法是什么
文章起源:http://bm7419.com/article32/geippc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、做網(wǎng)站App開發(fā)、移動(dòng)網(wǎng)站建設(shè)虛擬主機(jī)、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化