在solr函数查询中使用另一个字段值作为默认值

时间:2012-04-19 16:27:16

标签: 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。

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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))

有点迂回的方式,但工作正常。