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为我提供构建所需逻辑的提示?
谢谢!
答案 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)