Solr權重設置


目前影響solr查詢返回結果默認是采用score進行排序的,如何影響文章靜態score權重值,主要有三種方案:

1. 通過solrConfig.xml進行指定配置

<requestHandler name="select" 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>
        <bool name="hl">true</bool> 
        <str name="hl.fl">title,content</str>  
       <str name="f.content.hl.fragsize">200</str>
       <str name="mlt.qf">
           id^10.0 title^10.0 content^1.0
        </str>
     </lst>
</requestHandler>

2. 通過SolrJ在索引階段賦值靜態權重

  對文檔某個字段指定相應的權重,其中attrName為屬性名稱,attr為具體的內容,5.0f為對應指定的權重值(默認為1分)

  doc.setField(attrName, attr.trim(), 5.0f);

  對整個文檔賦boost值

  doc.setDocumentBoost(1.5f);

3. 通過SolrJ在搜索階段賦權重查詢

  今天我講的是第二種方式,雖然第一種方式也可以實現權重指定,但是是寫死的不能進行動態化的調整,而且solrConfig.xml文件為solr最底層配置文件,如果已經大規模使用的話再想修改就不是那么簡單的事情了(嚴重導致集群發生STW即Stop The World),所以推薦第二種方式實現,索引數據這里就不多余介紹了,到這一步的話前面的應該都不是問題了,那么我直接上代碼來介紹如何通過代碼指定對應屬性的權重:

 1 SolrQuery query = new SolrQuery("*:*"); 
 2 query.set("df", "title");
 3 query.set("defType","dismax");  
 4 query.set("qf","title^1 price^0.1");//這里必須包含查詢條件title
 5 query.set("bf", "sum(abs(price))");
 6 query.setParam("q.op", "AND");
 7 query.addSort("pubTime", ORDER.desc);  
 8 query.setStart(0);
 9 query.setRows(10);
10 QueryResponse queryReponse;  
11 try {  
12     SolrInputDocument doc = new SolrInputDocument();   
13     queryReponse = solrServer.query(sq);  
14     SolrDocumentList doclist=sr.getResults();   
15      //計數器  
16      int i=0;  
17     for (SolrDocument solrDocument : doclist) {
18         System.out.println("標題:"+solrDocument.get("title")+"\n\n");  
19          ++i;  
20     }  
21     System.out.println(i+"個");  
22 } catch (SolrServerException e) {  
23     e.printStackTrace();  
24 }  

  以下是沒有權重排序的結果:

標題:一0  
標題:一1  
標題:一2  
標題:一3  
標題:一4  
5個

  以下是引入權重排序結果:

標題:一4  
標題:一3  
標題:一2  
標題:一1  
標題:一0  
5個 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM