Solr功能查询:gte、lte、eq功能
Solr FunctionQuery有一个DIV(x,y)函数。我有这样的需要,如果y=0,那么y应该等于x 换句话说,我需要用FunctionQuery表示以下逻辑:Solr功能查询:gte、lte、eq功能,solr,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文档中,我找不到任何可供我使用的比较函数,例如EQ(x,value)等 有人能给我一个提示,让我使用FunctionQuery构造我想要的逻辑吗 谢谢 您可以使用==表示equals和
if y == 0, return 1 /* i.e. DIV(x,x) */
else, return DIV(x,y)
不知何故,从Solr文档中,我找不到任何可供我使用的比较函数,例如EQ(x,value)等
有人能给我一个提示,让我使用FunctionQuery构造我想要的逻辑吗
谢谢 您可以使用==表示equals和if条件语句,如下所示:- e、 g.
if(y==0;1;DIV(x,y))
检查示例@
if(颜色==“红色”100;if(颜色==“绿色”50;25))
:此函数检查文档字段“color”,如果是“red”,则返回100,如果是“green”,则返回50,否则返回25 编辑:- Solr wiki提到,(逗号)作为分隔符
e、 g.
if(exists(myField),100,0)
为了澄清这个问题并记录我的最终解决方案,感谢Srikanth Venugopalan的评论:
实际上,您需要切换参数。曝光计数=0被解释为假。所以你的条件是{!boost b=if(exposure_count,div(1,exposure_count),1)}” 看起来,Lucid works确实有一个错误。FunctionQuery解析器没有使用比较运算符,例如==,至少这是我在查看源代码时发现的。此外,IF()函数的字段分隔符应该是,(逗号)而不是;(分号)
官方的解决方案是正确的。对于字符串术语,这是有效的: if(termfreq(字段名,“值”),2,1)
如果“fieldname”(termfreq将大于0)中包含“value”,则会产生2。一个
==
对您不起作用吗?类似于if(y==0,1,DIV(x,y))
?它不起作用。我在if(曝光计数==0,1,曝光计数))中的位置17处得到预期值“。这就是我试图在查询中使用boost函数的内容。完整语法是{!boost b=if(exposure\u count==0,1,div(1,exposure\u count))}要添加:如果我删除==0,它就起作用了。{!boost+b%3Dif(exposure\u count,1,div(1,exposure\u count))}”。似乎没有办法进行比较。实际上,您需要切换参数。曝光计数=0被解释为false。因此,您的条件将是{!boost+b%3Dif(曝光计数,div(1,曝光计数),1)}
我得到了预期值”,“在”if(曝光计数==0,1,div(1,曝光计数))中的位置17“。这就是我试图在查询中使用boost函数的地方。完整语法是{!boost b=if(exposure\u count==0,1,div(1,exposure\u count))}分隔符是;(分号)而不是,(逗号)添加:如果我删除==0,它就起作用了。{!boost+b%3Dif(exposure\u count,1,div(1,exposure\u count))}。似乎无法进行比较。请尝试更改分隔符,并尝试将其作为int 0或字符串“0”进行比较,应该可以使用。;(分号)不正确。应为逗号。