2011-04-29 24 views
3

我使用Solr中查詢rord()功能,以提高查詢結果對一個「等級」字段中,使用的語法是這樣的:在Solr中替換ord()和rord()函數查詢的建議策略是什麼?

bf=rord(cur_rank)^1.8 

該算法的效果很好,但最近的變化Solr的指示使用ord()和rord()現在是一個內存豬。從the changelog

搜索和排序,現在做了一個 每個區間爲單位,這意味着用於排序 和功能查詢 FieldCache項創建 和每個段使用的,可重複使用 針對不會在 索引更新之間更改的細分受衆羣。雖然通常 有利的,這可以在某些情況下 導致增加 存儲器使用超過1.3:

[...]

2)某些函數查詢諸如ORD ()和rord()需要一個頂級 級別的FieldCache實例,因此可能導致內存使用量增加 。 考慮使用替代方法替換ord()和rord() ,例如功能 基於ms()對日期 進行增強的查詢。

它提到處理可能的策略基於日期的提升,但如何對一個數字,如「等級」,其中等級爲1,記錄的總數之間的數字?

rord()似乎是理想的...任何其他策略?

回答

2

使用基於段的字段緩存的目的是減少加載時間。如果您希望在添加新段後獲取字段的值(每次提交都會完成該操作),則只需爲新添加的段加載新的字段緩存。

這是不可能與ord和rord給你的整個索引序號,而不是單個文件的值。

所以你唯一的解決方案是根據字段「cur_rank」而不是ord來計算boost值。

這是迄今爲止現在推動是如何工作的:它曾經使用日期字段的rord爲了計算升壓,而它現在使用的日期字段的值和現在的毫秒數。有關更多詳細信息,請參閱http://wiki.apache.org/solr/SolrRelevancyFAQ(「如何提高新文檔的分數」)。

+0

這就是我們最終做的。 – danieltalsky 2011-09-01 04:25:55