我有一個solr實例,其中包含具有從上個月到現在一年不等的'startTime'字段的文檔。我想添加一個提升查詢/函數來提高startTime字段接近當前時間的文檔的分數。SOLR - 增加函數(bf)以增加日期與現在最接近的文檔的得分
到目前爲止,我已經看到了很多,其使用rord增加提升到誰是新的文件的例子,但我從來沒見過像這樣的例子。
誰能告訴我該怎麼做?
謝謝
我有一個solr實例,其中包含具有從上個月到現在一年不等的'startTime'字段的文檔。我想添加一個提升查詢/函數來提高startTime字段接近當前時間的文檔的分數。SOLR - 增加函數(bf)以增加日期與現在最接近的文檔的得分
到目前爲止,我已經看到了很多,其使用rord增加提升到誰是新的文件的例子,但我從來沒見過像這樣的例子。
誰能告訴我該怎麼做?
謝謝
你可以在Solr 1.4中做日期數學。
如果你在Solr的1.4+,那麼你必須根據新舊程度提高訪問函數查詢了「毫秒」功能和標準,教材的做法是:
recip(ms(NOW,startTime),3.16e-11,1,1)
ms給出兩個參數之間的毫秒數。整個表達式將得分提高了1,現在的文檔爲1,1年前的文檔爲1/2,2年前的文檔爲1/3。(見肖恩蒂姆指出的http://wiki.apache.org/solr/FunctionQuery#Date_Boosting)。
你的情況,你必須在未來日期的文檔,以及那些將獲得分配由上述功能的負分,所以你可能會想在絕對值上扔,像這樣:
recip(abs(ms(NOW,startTime)),3.16e-11,1,1)
abs(ms(NOW,startTime))將給出startTime和now之間的毫秒數,保證是非負的。
這將是一個很好的起點。如果你願意的話,那麼你可以調整3.16e-11,如果它太積極或者不夠激進。
相切的MS功能只能在域基礎上TrieDate類,而不是經典的日期和LegacyDate類工作。如果您的schema.xml基於Solr 1.4的示例,那麼您的日期字段可能已經是正確的格式。
這是一個很好的答案。我發現另外一個,也解釋了爲什麼他們使用3.16e-11,以及如何將其更改爲適合您的需要: http://stackoverflow.com/a/22213417/241367 – thekingoftruth 2014-10-08 17:16:43
如果這不起作用,你可以試試: {!boost b = recip(rord(contentdate),1,1000,1000)} – 2015-01-21 16:25:02
你試過問Solr用戶嗎? – 2009-09-30 19:43:38