Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr功能查询:gte、lte、eq功能_Solr - Fatal编程技术网

Solr功能查询:gte、lte、eq功能

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和

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条件语句,如下所示:-

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”进行比较,应该可以使用。;(分号)不正确。应为逗号。