2016-11-09 51 views
1

什麼是實現以下事情的正確方法:Solr的查詢 - 浮動範圍內提高

任務:查詢文件,其中電壓(浮動)等於100.0和寬容-0%/ + 20%

Q = + voltage_f [100.0〜120.0]

我想與該電壓接近下限(100.0)的文檔獲得更多的積分與接近上限電壓的文件( 120.0)。

反之亦然 - 公差-20%/ + 0%

Q = + voltage_f [80.0〜100.0]

我想與接近上限(100.0)得到更多的點電壓文檔作爲與電壓接近下限的文件( 80.0)。

回答

0

你可以use the recip function來獲取從1開始,然後逐漸減小作爲值的值增加:

執行與recip(x,m,a,b)倒數函數執行a/(m*x+b)其中m,a,b是常數,x是任何任意複雜的功能。

當a和b相等且x> = 0時,此函數的最大值爲1,隨着x的增加而下降。增加a和b的值會導致整個功能移動到曲線的較平坦部分。當x是rord(datefield)時,這些屬性可以使它成爲提高最近文檔的理想函數。

對於你的第一個情況下,可以通過使用recip直接,調整ab值,以滿足您的需求來實現。

對於可以使用abs(sub(100, x))作爲x第二種情況下,作爲成爲較大的值是進一步遠離100

recip呼叫可以在bf被添加(對於dismax,edismax)或在boost( edismax)。

你的前端將不得不決定適當的值以用於abm - 您可以使用debugQuery=true看到升壓多少貢獻,並進行相應的調整。

+0

適用於簡單的單參數查詢。其他參數的重量會影響評分。我試圖對其他參數應用「負面推動」,現在它工作。 – Igor

+0

根據您的使用情況,您可以將它們移至'fq'(僅篩選並且不計分),或者按照函數進行排序(如果您根本不想計分 - 但您可能會)。否則,這是一個調整權重以獲得結果的問題,它爲您提供了最佳的相關性。 – MatsLindh