Solr FunctionQuery:gte,lte,eq函数

时间:2013-03-20 00:59:01

标签: solr

Solr FunctionQuery具有DIV(x,y)函数。如果y = 0,我有这样的需要,那么y应该等于x。

换句话说,我需要用FunctionQuery表示以下逻辑:

if y == 0, return 1 /* i.e. DIV(x,x) */
else, return DIV(x,y)

不知何故,从Solr doc,我找不到任何比较函数,例如我可以使用EQ(x,值)等。

是否有人能够使用FunctionQuery为我提供构建所需逻辑的提示?

谢谢!

3 个答案:

答案 0 :(得分:3)

要清理这个问题并记录我的最终解决方案,感谢Srikanth Venugopalan评论:

  

实际上你需要切换参数。 exposure_count = 0被解释为false。所以你的条件是{!boost b = if(exposure_count,div(1,exposure_count),1)}“

看来,Lucid作品documentation确实有错。 FunctionQuery解析器不接受比较运算符,例如==,至少这是我通过查看源代码找到的。此外,IF()函数的字段分隔符应该是(逗号)而不是;(分号)。

官方Solr wiki是正确的。

答案 1 :(得分:2)

对于字符串术语,这有效:

如果(termfreq(字段名, “值”),2,1)

如果“field”包含在“fieldname”中,则产生2(termfreq将> 0)

答案 2 :(得分:0)

你可以使用== for equals,如果条件语句如下: -

e.g。 if(y == 0; 1; DIV(x,y))

检查示例@ Documentation

if(color=="red"; 100; if(color=="green"; 50; 25))
此函数检查文档字段“color”,如果是“red”则返回100,如果是“green”则返回50,否则返回25.

编辑: -

Solr if wiki提及,(逗号)作为分隔符

e.g。 if(exists(myField),100,0)