简介
Util类封装了一系列常用的功能型函数,比如衰减函数,归一化函数等。
函数列表
函数原型 | 函数简介 |
static double gaussDecay(double origin, double value, double scale, double decay, double offset) | 使用高斯函数,根据数值和给定的起始点之间的距离,计算其衰减程度 |
static double gaussDecay(double origin, double value, double scale, double decay) | 使用高斯函数,根据数值和给定的起始点之间的距离,计算其衰减程度 |
static double gaussDecay(double origin, double value, double scale) | 使用高斯函数,根据数值和给定的起始点之间的距离,计算其衰减程度 |
static double expDecay(double origin, double value, double scale, double decay, double offset) | 使用指数函数,根据数值和给定的起始点之间的距离,计算其衰减程度 |
static double expDecay(double origin, double value, double scale, double decay) | 使用指数函数,根据数值和给定的起始点之间的距离,计算其衰减程度 |
static double expDecay(double origin, double value, double scale) | 使用指数函数,根据数值和给定的起始点之间的距离,计算其衰减程度 |
static double linearDecay(double origin, double value, double scale, double decay, double offset) | 使用线性函数,根据数值和给定的起始点之间的距离,计算其衰减程度 |
static double linearDecay(double origin, double value, double scale, double decay) | 使用线性函数,根据数值和给定的起始点之间的距离,计算其衰减程度 |
static double linearDecay(double origin, double value, double scale) | 使用线性函数,根据数值和给定的起始点之间的距离,计算其衰减程度 |
static double normalize(double value, double max, double min) | 使用线性函数进行归一化 |
static double normalize(double value, double max) | 使用对数函数进行归一化 |
static double normalize(double value) | 使用反正切函数进行归一化 |
函数详情
static double gaussDecay(double origin, double value, double scale, double decay, double offset)
使用高斯函数,根据数值和给定的起始点之间的距离,计算其衰减程度。适用于按照数值大小进行排序,并当数值在一定范围内无需在做区分,比如查找距离用户最近的酒店,按照距离由近到远排序,并且认为距离小于100m的酒店不用做区分,假设 distanceValue为距离,函数可以写为gauss_decay(0, distanceValue, 5, 0.000001, 0.1)。
参数列表:
origin — 衰减函数的起始点,value为origin时得分为1.0。
value — 需要计算衰减程度的值。
scale — 衰减率,当value从origin下落时函数算分改变的速度。
decay — 从origin衰减到scale时的得分。
offset — 当距离大于offset时才开始计算衰减程度,origin - offset < value < origin + offset时函数返回1.0。
返回值:
返回衰减程度,取值范围为[0, 1]。
代码示例:
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.features.Util;
import com.aliyun.opensearch.cava.features.Distance;
class BasicSimilarityScorer {
Distance _distance;
boolean init(OpsScorerInitParams params) {
_distance = Distance.create(params, "location", "query_location");
return true;
}
double score(OpsScoreParams params) {
double distanceValue = _distance.evaluate(params);
return Util.gaussDecay(0.0, distanceValue, 5.0, 0.000001, 0.1);
}
}
static double gaussDecay(double origin, double value, double scale, double decay)
同static double gaussDecay(double origin, double value, double scale, double decay, double offset),只其中offset设置为0。
参数列表:
origin — 衰减函数的起始点,value为origin时得分为1.0。
value — 需要计算衰减程度的值。
scale — 衰减率,当value从origin下落时函数算分改变的速度。
decay — 从origin衰减到scale时的得分。
返回值:
返回衰减程度,取值范围为[0, 1]。
代码示例:
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.features.Util;
import com.aliyun.opensearch.cava.features.Distance;
class BasicSimilarityScorer {
Distance _distance;
boolean init(OpsScorerInitParams params) {
_distance = Distance.create(params, "location", "query_location");
return true;
}
double score(OpsScoreParams params) {
double distanceValue = _distance.evaluate(params);
return Util.gaussDecay(0.0, distanceValue, 5.0, 0.000001);
}
}
static double gaussDecay(double origin, double value, double scale)
同static double gaussDecay(double origin, double value, double scale, double decay, double offset),只其中decay设置为0.000001,offset设置为0。
参数列表:
origin — 衰减函数的起始点,value为origin时得分为1.0。
value — 需要计算衰减程度的值。
scale — 衰减率,当value从origin下落时函数算分改变的速度。
返回值:
返回衰减程度,取值范围为[0, 1]。
代码示例:
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.features.Util;
import com.aliyun.opensearch.cava.features.Distance;
class BasicSimilarityScorer {
Distance _distance;
boolean init(OpsScorerInitParams params) {
_distance = Distance.create(params, "location", "query_location");
return true;
}
double score(OpsScoreParams params) {
double distanceValue = _distance.evaluate(params);
return Util.gaussDecay(0.0, distanceValue, 5.0);
}
}
static double expDecay(double origin, double value, double scale, double decay, double offset)
使用指数函数,根据数值和给定的起始点之间的距离,计算其衰减程度。适用场景同gaussDecay函数。
参数列表:
origin — 衰减函数的起始点,value为origin时得分为1.0。
value — 需要计算衰减程度的值。
scale — 衰减率,当value从origin下落时函数算分改变的速度。
decay — 从origin衰减到scale时的得分。
offset — 当距离大于offset时才开始计算衰减程度,origin - offset < value < origin + offset时函数返回1.0。
返回值:
返回衰减程度,取值范围为[0, 1]。
代码示例:
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.features.Util;
import com.aliyun.opensearch.cava.features.Distance;
class BasicSimilarityScorer {
Distance _distance;
boolean init(OpsScorerInitParams params) {
_distance = Distance.create(params, "location", "query_location");
return true;
}
double score(OpsScoreParams params) {
double distanceValue = _distance.evaluate(params);
return Util.expDecay(0.0, distanceValue, 5.0, 0.000001, 0.1);
}
}
static double expDecay(double origin, double value, double scale, double decay)
同static double expDecay(double origin, double value, double scale, double decay, double offset),其中offset设置为0。
参数列表:
origin — 衰减函数的起始点,value为origin时得分为1.0。
value — 需要计算衰减程度的值。
scale — 衰减率,当value从origin下落时函数算分改变的速度。
decay — 从origin衰减到scale时的得分。
返回值:
返回衰减程度,取值范围为[0, 1]。
代码示例:
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.features.Util;
import com.aliyun.opensearch.cava.features.Distance;
class BasicSimilarityScorer {
Distance _distance;
boolean init(OpsScorerInitParams params) {
_distance = Distance.create(params, "location", "query_location");
return true;
}
double score(OpsScoreParams params) {
double distanceValue = _distance.evaluate(params);
return Util.expDecay(0.0, distanceValue, 5.0, 0.000001);
}
}
static double expDecay(double origin, double value, double scale)
同static double expDecay(double origin, double value, double scale, double decay, double offset),其中decay设置为0.000001,offset设置为0。
参数列表:
origin — 衰减函数的起始点,value为origin时得分为1.0。
value — 需要计算衰减程度的值。
scale — 衰减率,当value从origin下落时函数算分改变的速度。
返回值:
返回衰减程度,取值范围为[0, 1]。
代码示例:
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.features.Util;
import com.aliyun.opensearch.cava.features.Distance;
class BasicSimilarityScorer {
Distance _distance;
boolean init(OpsScorerInitParams params) {
_distance = Distance.create(params, "location", "query_location");
return true;
}
double score(OpsScoreParams params) {
double distanceValue = _distance.evaluate(params);
return Util.expDecay(0.0, distanceValue, 5.0);
}
}
static double linearDecay(double origin, double value, double scale, double decay, double offset)
使用线性函数,根据数值和给定的起始点之间的距离,计算其衰减程度。适用场景同gaussDecay函数。
参数列表:
origin — 衰减函数的起始点,value为origin时得分为1.0。
value — 需要计算衰减程度的值。
scale — 衰减率,当value从origin下落时函数算分改变的速度。
decay — 从origin衰减到scale时的得分。
offset — 当距离大于offset时才开始计算衰减程度,origin - offset < value < origin + offset时函数返回1.0。
返回值:
返回衰减程度,取值范围为[0, 1]。
代码示例:
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.features.Util;
import com.aliyun.opensearch.cava.features.Distance;
class BasicSimilarityScorer {
Distance _distance;
boolean init(OpsScorerInitParams params) {
_distance = Distance.create(params, "location", "query_location");
return true;
}
double score(OpsScoreParams params) {
double distanceValue = _distance.evaluate(params);
return Util.linearDecay(0.0, distanceValue, 5.0, 0.000001, 0.1);
}
}
static double linearDecay(double origin, double value, double scale, double decay)
同static double linearDecay(double origin, double value, double scale, double decay, double offset),其中offset设置为0。
参数列表:
origin — 衰减函数的起始点,value为origin时得分为1.0。
value — 需要计算衰减程度的值。
scale — 衰减率,当value从origin下落时函数算分改变的速度。
decay — 从origin衰减到scale时的得分。
返回值:
返回衰减程度,取值范围为[0, 1]。
代码示例:
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.features.Util;
import com.aliyun.opensearch.cava.features.Distance;
class BasicSimilarityScorer {
Distance _distance;
boolean init(OpsScorerInitParams params) {
_distance = Distance.create(params, "location", "query_location");
return true;
}
double score(OpsScoreParams params) {
double distanceValue = _distance.evaluate(params);
return Util.linearDecay(0.0, distanceValue, 5.0, 0.000001);
}
}
static double linearDecay(double origin, double value, double scale)
同static double linearDecay(double origin, double value, double scale, double decay, double offset),其中decay设置为0.000001,offset设置为0。
参数列表:
origin — 衰减函数的起始点,value为origin时得分为1.0。
value — 需要计算衰减程度的值。
scale — 衰减率,当value从origin下落时函数算分改变的速度。
返回值:
返回衰减程度,取值范围为[0, 1]。
代码示例:
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.features.Util;
import com.aliyun.opensearch.cava.features.Distance;
class BasicSimilarityScorer {
Distance _distance;
boolean init(OpsScorerInitParams params) {
_distance = Distance.create(params, "location", "query_location");
return true;
}
double score(OpsScoreParams params) {
double distanceValue = _distance.evaluate(params);
return Util.linearDecay(0.0, distanceValue, 5.0);
}
}
static double normalize(double value, double max, double min)
使用线性函数进行归一化,公式为(value - min) / (max -min)。
参数列表:
value:需要做归一化的值。
max:value的最大值。
min:value的最小值。
返回值:
返回归一化结果,取值范围为[0, 1],当max小于min返回0。
代码示例:
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.features.Util;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return params.getDoc().requireAttribute("price");
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
long price = doc.docFieldLong("price");
return Util.normalize(price, 100000.0, 0.0);
}
}
static double normalize(double value, double max)
使用对数函数进行归一化,公式为log10(value)/log(max)。
参数列表:
value:需要做归一化的值。
max:value的最大值。
返回值:
返回归一化结果,取值范围为[0, 1],当value和max小于1时返回0。
示例代码:
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.features.Util;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return params.getDoc().requireAttribute("price");
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
long price = doc.docFieldLong("price");
return Util.normalize(price, 100000.0);
}
}
static double normalize(double value)
使用反正切函数进行归一化,公式为atan(value / 1000.0) * 2 / pi,其中pi为3.141593。
参数列表:
value:需要做归一化的值。
返回值:
返回归一化结果,取值范围为[0, 1]。
示例代码:
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.features.Util;
class BasicSimilarityScorer {
boolean init(OpsScorerInitParams params) {
return params.getDoc().requireAttribute("price");
}
double score(OpsScoreParams params) {
OpsDoc doc = params.getDoc();
long price = doc.docFieldLong("price");
return Util.normalize(price);
}
}