6

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 构建我想要的逻辑?

谢谢!

4

3 回答 3

4

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

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

看起来,Lucid 作品文档确实有一个错误。FunctionQuery 解析器不采用比较运算符,例如 ==,至少这是我通过查看源代码发现的。此外,IF() 函数的字段分隔符应该是 ,(逗号)而不是 ;(分号)。

官方的 Solr wiki是正确的。

于 2013-03-20T09:52:42.137 回答
2

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

if(termfreq(fieldname,"value"),2,1)

如果“字段名”中包含“值”,则产生 2(termfreq 将 >0)

于 2014-01-28T12:38:29.577 回答
0

您可以将 == 用于等于和 if 条件语句,如下所示:-

例如 if(y == 0; 1; DIV(x,y))

检查示例@文档

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

编辑 :-

Solr如果wiki 提到 ,(逗号)作为分隔符

例如if(exists(myField),100,0)

于 2013-03-20T03:58:00.223 回答