有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    好吧,我真的找到了一个解决方案,或者更好的办法

    heightWL=if(map(height,160,169,1,0),div(sub(height,160),10),0)
    

    因此,我基本上映射了a中x和y之间的所有值>;x和a<;y为1,所有其他值为0。这种方法实际上可以检查,因为它可以使用1和0,在这种情况下,我计算这个区域的子值