java在solr if表达式中使用数学
我试图在solr的if语句中使用数学。我想实现的是,我有一个梯形函数定义为: x轴上有4个点,左_最小值、左_最佳值、右_最佳值、右_最大值。 对于字段的每个值,我希望得到以下结果:
value v
score s
maxscore
if (v<left_minimum)
s = 0;
if (v>right_maximum)
s = 0;
if (v>=left_optimum AND v<=right_optimum)
s = maxScore;
if (v>=left_minimum AND v<left_optimum)
s = maxScore * (v - left_minimum) / (left_optimum - left_minimum)
if (v>right_optimum AND v<=right_maximum )
s = maxScore * (v - right_optimum) / (right_maximum - right_optimum)
其基本思想是将“接近”理想结果的结果排名高于“太远”的结果。 为了实现这一点,我尝试将高度计算分为三部分(maxscore为1.0):
heightWM=product(1.0, map(height,160,170,1,0))
&heightWL=if(height < 160 AND height > 150, product(1.0, div(sub(height,160),10)), 0)
&heightWR=if(height < 180 AND height > 170, product(1.0, div(sub(height,170),10)), 0)
&heightW=sum(heightWL, heightWM, heightWR)
问题是索尔不喜欢用数学表达式表示if。或者至少我还没找到方法。 是否还有其他可能实现这一目标
# 1 楼答案
好吧,我真的找到了一个解决方案,或者更好的办法
因此,我基本上映射了a中x和y之间的所有值>;x和a<;y为1,所有其他值为0。这种方法实际上可以检查,因为它可以使用1和0,在这种情况下,我计算这个区域的子值