Solr 比较函数报告 "Unknown function"
Solr comparison functions report "Unknown function"
我正在尝试为 Solr 4.x 服务器编写一个相当基本的增强函数。
我希望我的 boost 函数能这样工作(伪代码)
if (weight >= 700) boost = 1.5
我传递给 Solr 的 boost 函数如下
if(gte(weight,700),1.5,1)
我在通过 Solr 管理员提交查询时收到以下错误消息 UI。
"org.apache.solr.search.SyntaxError: Unknown function gte in FunctionQuery('if(gte(weight,700),1.5,1)', pos=7)"
我尝试了我在文档中找到的其他基本比较函数(gt
、lt
、lte
)。但遇到了同样的问题。
这些函数在 Solr 4.x 中可用吗?我找到的文档没有具体说明它们是在哪个版本中引入的。Solr 4.x 中是否有任何函数可以执行所需的比较?
您提到的函数是added in 6.2.0。
您可以将查询重写为 if(max(0, sub(weight, 700)), 1.5, 1.0)
- 如果值小于 700,则使用 0 - if 测试将失败并给出 1.0。否则它将使用实际值,并将被评估为 true,并给出 1.5。如果您想要 gte
,请将 700
替换为 699
或任何您的最小步长。示例和逐步计算:
weight = 800
sub(weight, 700) => 100
max(0, 100) => 100
if (100) => 1.5
或者如果您的体重低于 700:
weight = 698
sub(weight, 698) => -2
max(0, -2) => 0
if (0) => 1.0
我正在尝试为 Solr 4.x 服务器编写一个相当基本的增强函数。
我希望我的 boost 函数能这样工作(伪代码)
if (weight >= 700) boost = 1.5
我传递给 Solr 的 boost 函数如下
if(gte(weight,700),1.5,1)
我在通过 Solr 管理员提交查询时收到以下错误消息 UI。
"org.apache.solr.search.SyntaxError: Unknown function gte in FunctionQuery('if(gte(weight,700),1.5,1)', pos=7)"
我尝试了我在文档中找到的其他基本比较函数(gt
、lt
、lte
)。但遇到了同样的问题。
这些函数在 Solr 4.x 中可用吗?我找到的文档没有具体说明它们是在哪个版本中引入的。Solr 4.x 中是否有任何函数可以执行所需的比较?
您提到的函数是added in 6.2.0。
您可以将查询重写为 if(max(0, sub(weight, 700)), 1.5, 1.0)
- 如果值小于 700,则使用 0 - if 测试将失败并给出 1.0。否则它将使用实际值,并将被评估为 true,并给出 1.5。如果您想要 gte
,请将 700
替换为 699
或任何您的最小步长。示例和逐步计算:
weight = 800
sub(weight, 700) => 100
max(0, 100) => 100
if (100) => 1.5
或者如果您的体重低于 700:
weight = 698
sub(weight, 698) => -2
max(0, -2) => 0
if (0) => 1.0