概要
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)
ガウス関数を使用して、値と指定された開始点の間の距離に基づいて減衰度を計算します。この減衰関数を使用して数値をソートできます。指定された値の範囲内の数値をソートする必要はありません。たとえば、最寄りのホテルを検索する場合、近くのホテルは近い順にソートされ、100メートル未満のホテルはソートする必要はありません。この場合、distanceValueパラメーターを使用して距離を指定する場合、次の減衰関数を使用できます:gauss_decay(0, distanceValue, 5, 0.000001, 0.1)。
パラメーター:
origin:開始点。valueパラメーターの値がoriginパラメーターの値と等しい場合、スコアは1.0です。
value:減衰度を計算する値。
scale:減衰率。valueパラメーターの値がoriginパラメーターの値から減少した場合のスコアの変化率を反映します。
decay:valueパラメーターの値がoriginパラメーターの値からscaleパラメーターの値に減少した場合に得られるスコア。
offset:オフセット。距離がoffsetパラメーターの値よりも大きい場合、減衰度の計算が開始されます。valueパラメーターの値が、originパラメーターの値からoffsetパラメーターの値を引いた値よりも大きく、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:valueパラメーターの値が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パラメーターとoffsetパラメーターがそれぞれ0.000001と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:valueパラメーターの値がoriginパラメーターの値からscaleパラメーターの値に減少した場合に得られるスコア。
offset:オフセット。距離がoffsetパラメーターの値よりも大きい場合、減衰度の計算が開始されます。valueパラメーターの値が、originパラメーターの値からoffsetパラメーターの値を引いた値よりも大きく、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:valueパラメーターの値が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パラメーターとoffsetパラメーターがそれぞれ0.000001と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:valueパラメーターの値がoriginパラメーターの値からscaleパラメーターの値に減少した場合に得られるスコア。
offset:オフセット。距離がoffsetパラメーターの値よりも大きい場合、減衰度の計算が開始されます。valueパラメーターの値が、originパラメーターの値からoffsetパラメーターの値を引いた値よりも大きく、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:valueパラメーターの値が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パラメーターとoffsetパラメーターがそれぞれ0.000001と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/(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, 0.0, 100000.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);
}
}