2012-04-19 98 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)) 

有点迂回的方式做到这一点,但工作得很好。

相关问题