2012-04-19 61 views
1

我試圖運行下面的查詢:在Solr的函數查詢中使用另一個字段值作爲默認

/solr/select?q=_val_:query("{!dismax qf=text v='solr rocks'}", my_field) 

但是,指定my_field作爲默認值引發錯誤:

java.lang.NumberFormatException: For input string: "my_field" 

此外,這些查詢也失敗:

/solr/select?q=_val_:query("{!dismax qf=text v='solr rocks'}", ceil(my_field)) 
/solr/select?q=_val_:query("{!dismax qf=text v='solr rocks'}", ceil(1.0)) 

我們不能指定另一個字段或功能爲函數查詢中的默認值?有沒有另一種方法可以完成我想要做的事情?

我正在使用Solr 3.1。

回答

1

根據the code of the ValueSourceParser for QueryValueSource(第261行),query的第二個參數只能是一個浮點數。所以3或4.5將工作,但my_fieldceil(1.0)這是ValueSource而不是常數不會。

我不知道你的用例是什麼,但會採取max(query("{!dismax qf=text v='solr rocks'}"), my_field)是否足夠好? (假設my_field具有正值,結果只會與當查詢的得分低於my_field的值時嘗試執行的操作不同)

否則,如果您確實需要此功能,則應該是根據QueryValueSource很容易實現你自己的函數,以便將ValueSource作爲第二個參數而不是float。

+0

感謝您的回答。我投了票,但我想看看是否有人有解決方法或其他解決方案。 – Jimtronic 2012-04-19 22:00:23

0

我沒有找到一種替代方法來模擬所需的邏輯:

/solr/select?q=_val_:sum(query("{!dismax qf=text v='solr rocks'}"),product(map(query("{!dismax qf=text v='solr rocks'}",-1),0,100,0,1), my_field)) 

有點迂迴的方式做到這一點,但工作得很好。

相關問題