2010-02-01 27 views
4

我目前有一個SOLR查詢使用查詢(q),查詢字段(qf)和短語字段(pf)來檢索我想要的結果。一個例子是:添加日期增強到複雜的SOLR查詢

/solr/select 
?q=superbowl 
&qf=title^3+headline^2+intro+fulltext 
&pf=title^3+headline^2+intro+fulltext 
&fl=id,title,ts_modified,score 
&debugQuery=true 

的想法是,標題和「主項」的標題給出的結果是「關於」什麼是最好的指示,但介紹和全文提供一些輸入了。也就是說,想象一下鏈接集合,其中集合本身具有元數據(它是一個集合),但是每個鏈接都有它自己的數據(鏈接標題,摘要等)。如果我們搜索「超級碗」,最相關的結果是收集元數據中的「超級碗」,最不相關的結果就是其中一個鏈接的簡介中的「超級碗」。所有有效的結果。

我想要做的是增加相關度分數的提升,以便最近的結果向頂部浮動,但保留標題,標題,介紹,全文作爲公式的一部分。集合元數據中的搜索字符串的最近結果將比僅在鏈接元數據中的搜索字符串更具相關性......但是「僅鏈接」最近的結果可能比具有搜索字符串的非常舊的結果更相關收集元數據。 (我希望這有點清楚)。

問題是,我無法弄清楚如何將SOLR站點上記錄的boost函數與qf/pf字段的使用結合起來。具體...

從SOLR網站,類似下面的作品按日期提振結果:

/solr/select 
?q={!boost%20b=$dateboost%20v=$qq} 
&dateboost=ord(ts_modified) 
&qq=superbowl 
&fl=ts_modified,score 
&debugQuery=true 

但是,我想不出如何在查詢與使用QF的結合和pf。任何建議都會比歡迎。

由於danben的反應,我能想出如下:

/solr/select 
?q={!boost%20b=$dateboost%20v=$qq%20defType=dismax} 
&dateboost=ord(ts_modified) 
&qq=superbowl 
&qf=title^3+headline^2+intro^2+fulltext 
&pf=title^3+headline^2+intro^2+fulltext 
&fl=ts_modifieds,score 
&debugQuery=true 

它看起來像我有實際的問題是:

  • 我左右空間在Q PARAM而不是在複製/粘貼時轉義它們(%20)
  • 我沒有在我的q參數中包含defType = dismax,因此它會關注qf/pf參數

回答

4

退房http://wiki.apache.org/solr/SolrRelevancyFAQ#How_can_I_boost_the_score_of_newer_documents

這是基於ms函數,它返回兩個時間戳/日期,和ReciprocalFloatFunction其隨着值傳遞減少之間以毫秒爲單位的差。

由於您使用的是DisMaxRequestHandler,因此您可能需要使用參數bq/bf指定查詢。從http://lucene.apache.org/solr/api/org/apache/solr/handler/DisMaxRequestHandler.html

BQ - (升壓查詢)將被包含在 用戶原始Lucene的查詢查詢到影響得分。如果 這是一個帶有默認 增強(1.0f)的布爾查詢,那麼單個 子句將直接添加到主查詢 。否則,將按原樣包含查詢 。這個參數可以是 多次指定,並且 增量是相加的。注:如果單個bq參數指定爲 ,則上面列出的 行爲僅在 效果中。因此,您可以通過 指定一個額外的空白bq 參數來禁用它。

bf - (升壓功能)功能(帶可選升壓),將 包含在用戶查詢中,以 影響得分。格式爲: 「funcA(arg1,arg2)^ 1.2 funcB(arg3,arg4)^ 2.2」。注: 空格不允許在 函數參數中使用。該參數可以是多次指定的 ,並且 函數是可加的。

+0

所以,可悲的是我多次閱讀該頁面,試圖找出結果。我回去重讀它,因爲您似乎認爲答案在那裏......而且我最終通過用%20替換查詢(1)中的空格並將「defType = dismax」信息添加到它。非常感謝。 – RHSeeger 2010-02-01 20:05:56

+1

還有一點需要注意的是,如果您的日期不使用TrieFields(在Solr 1.4中引入),則不能使用ms函數。 – 2010-06-03 19:04:26

0

這裏是關於日期,促進Solr的搜索結果一個很好的文章:

http://www.metaltoad.com/blog/date-boosting-solr-drupal-search-results


在Drupal的,這可以通過下面的代碼可以簡單地實現:

使用Apachesolr模塊

/** 
* Implements hook_apachesolr_query_alter(). 
*/ 
function hook_search_apachesolr_query_alter(DrupalSolrQueryInterface $query) { 
    $query->addParam('bf', array('freshness' => 
    'recip(abs(ms(NOW/HOUR,dm_field_date)),3.16e-11,1,.1)' 
)); 
}