2015-07-10 60 views
0

我正在使用縮放函數來規範1和3之間的字段的值。問題在於值不是相對於結果集進行規範化的,而是對所有索引文件。在結果集內縮放字段值

例如:

/select?q=id:173540413&fl=id,scale(id, 1, 2) 
id,"scale(id, 1, 2)" 
173540413,1.9903924 

/select?q=id:(173540413 173540377)&fl=id,scale(id, 1, 2) 
id,"scale(id, 1, 2)" 
173540413,1.9903924 
173540377,1.9903922 

期望的結果將是:

/select?q=id:173540413&fl=id,scale(id, 1, 2) 
id,"scale(id, 1, 2)" 
173540413,1 

/select?q=id:(173540413 173540377)&fl=id,scale(id, 1, 2) 
id,"scale(id, 1, 2)" 
173540413,2 
173540377,1 

有一些其他的方式來擴展的結果,可能不使用規模?

回答

1

有一個迂迴的方式來實現這個在Solr。對一個字段是查詢相關對一個字段是使用時VS使用時

Solr的縮放功能表現不同。

因此,當您試圖縮放像'id'那樣不依賴於查詢的字段時,Solr會認爲整個文檔集要按比例縮放。這將改變您的最小值和最大值取自整個文檔集而不是查詢結果集。而當您縮放查詢相關值(如查詢($ q)(它是文檔與文檔相對於searchterm的文本相似度得分)時,Solr僅考慮搜索結果集以獲取最小值和最大值進行縮放。

現在,我們想要的是第二個選項。所以,我們做這樣的事情:

Q =搜索關鍵詞& FL = ID,規模(子(SUM(ID,查詢($ Q)),查詢($ Q)),1,2)

這是我們正在做的與該領域:ID +查詢($ q) - 查詢($ q)

這誘使Solr認爲這是一個查詢相關字段,實際上它的計算結果爲相同的'id'字段。這將爲您提供平穩的[1,2]基於範圍的縮放

除了規模(),我相信這種方式也將與其他功能工作查詢MAX()分鐘()其上設置的,而不僅僅是查詢結果集整個文檔操作。

+0

謝謝。我會盡快嘗試。我希望這不是一個大的表現。 – bxfckrclooo

+0

它似乎適用於6.4.0,但不適用於4.8.1。無論如何,謝謝你的巧妙方法。我標明這個答案是正確的。 – bxfckrclooo

0

您可以使用Stats Component來獲取您的設置的最小/最大值,然後在中間件中進行縮放。

下面的元素stats/stats_fields/fieldname應該有一個minmax鍵,它表示查詢結果中值的末端。

+0

不幸的是,我不能那樣做。我必須使用這些值來提升。 – bxfckrclooo