OpsKvPairs は、受信クエリの kvpairs 句 からカスタムのキーと値のペアを読み取ります。また、文字列の値を数値型や配列に変換するため、ご利用のスコアラーは型付きデータを直接扱うことができます。
ご利用のスコアラーの init() メソッドで OpsKvPairs インスタンスを取得します。
OpsKvPairs kvpairs = params.getRequest().getKVPairs();関数
| 関数 | 説明 | キーが存在しない場合のデフォルト値 |
|---|---|---|
CString getValue(CString key) | カスタムパラメーターの値を CString として返します。 | null |
long getLong(CString key) | カスタムパラメーターの値を long に変換して返します。 | 0 |
float getFloat(CString key) | カスタムパラメーターの値を float に変換して返します。 | 0 |
double getDouble(CString key) | カスタムパラメーターの値を double に変換して返します。 | 0 |
long[] getLongArray(CString key, CString sep) | カスタムパラメーターの値をデリミタで分割し、long[] を返します。 | null |
float[] getFloatArray(CString key, CString sep) | カスタムパラメーターの値をデリミタで分割し、float[] を返します。 | null |
double[] getDoubleArray(CString key, CString sep) | カスタムパラメーターの値をデリミタで分割し、double[] を返します。 | null |
関数の詳細
すべての例で同じスコアラーのスケルトンを使用します。完全なクラス構造は以下に一度だけ示し、以降の例では関連する行のみを示します。
package users.scorer;
import cava.lang.CString;
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.OpsKvPairs;
class BasicSimilarityScorer {
// フィールド宣言と init() / score() は以下の各例で示します
}getValue(CString key)
カスタムパラメーターの値を CString として返します。キーは kvpairs 句で定義されている必要があります。
パラメーター: key — 取得するカスタムパラメーターのキー。
戻り値: パラメーターの値を CString として返します。キーが存在しない場合は null を返します。
class BasicSimilarityScorer {
CString flag;
boolean init(OpsScorerInitParams params) {
OpsKvPairs kvpairs = params.getRequest().getKVPairs();
flag = kvpairs.getValue("flag"); // "flag" が kvpairs 句にない場合は null
return true;
}
double score(OpsScoreParams params) {
if (flag != null && flag.equals("abc")) {
// 何らかの処理を実行
}
return 0.0;
}
}getLong(CString key)
カスタムパラメーターの値を long に変換して返します。
パラメーター: key — 取得するカスタムパラメーターのキー。
戻り値: パラメーターの値を long として返します。キーが存在しない場合、または値を long に変換できない場合は 0 を返します。
// init() 内:
long flag = kvpairs.getLong("flag"); // "flag" が存在しないか、数値以外の場合は 0
// score() 内:
if (flag == 1) {
// 何らかの処理を実行
}getFloat(CString key)
カスタムパラメーターの値を float に変換して返します。
パラメーター: key — 取得するカスタムパラメーターのキー。
戻り値: パラメーターの値を float として返します。キーが存在しない場合、または値を float に変換できない場合は 0 を返します。
// init() 内:
float ratio = kvpairs.getFloat("ratio"); // "ratio" が存在しないか、数値以外の場合は 0
// score() 内:
if (ratio > 1) {
// 何らかの処理を実行
}getDouble(CString key)
カスタムパラメーターの値を double に変換して返します。
パラメーター: key — 取得するカスタムパラメーターのキー。
戻り値: パラメーターの値を double として返します。キーが存在しない場合、または値を double に変換できない場合は 0 を返します。
// init() 内:
double ratio = kvpairs.getDouble("ratio"); // "ratio" が存在しないか、数値以外の場合は 0
// score() 内:
if (ratio > 1) {
// 何らかの処理を実行
}getLongArray(CString key, CString sep)
カスタムパラメーターの値を指定されたデリミタで分割し、その部分を long[] として返します。
パラメーター:
key— 取得するカスタムパラメーターのキー。sep— パラメーター値を分割するために使用されるデリミタ。
戻り値: 分割および変換された値の long[]。キーが存在しない場合、または値を long に変換できない場合は null を返します。
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
long[] flags;
boolean init(OpsScorerInitParams params) {
OpsKvPairs kvpairs = params.getRequest().getKVPairs();
flags = kvpairs.getLongArray("flags", ";"); // "1;2;3" を [1, 2, 3] に分割します
params.getDoc().requireAttribute("flag");
return true;
}
double score(OpsScoreParams params) {
long docFlag = params.getDoc().docFieldLong("flag");
if (flags != null && flags.length > 0 && docFlag == flags[0]) {
// 何らかの処理を実行
}
return 0.0;
}
}getFloatArray(CString key, CString sep)
カスタムパラメーターの値を指定されたデリミタで分割し、その部分を float[] として返します。
パラメーター:
key— 取得するカスタムパラメーターのキー。sep— パラメーター値を分割するために使用されるデリミタ。
戻り値: 分割および変換された値の float[]。キーが存在しない場合、または値を float に変換できない場合は null を返します。
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
float[] weights;
boolean init(OpsScorerInitParams params) {
OpsKvPairs kvpairs = params.getRequest().getKVPairs();
weights = kvpairs.getFloatArray("weights", ";"); // "0.5;0.3;0.2" を [0.5, 0.3, 0.2] に分割します
params.getDoc().requireAttribute("flags");
return true;
}
double score(OpsScoreParams params) {
long[] docFlags = params.getDoc().docFieldLongArray("flags");
if (docFlags == null || weights == null) {
return 0.0;
}
double score = 0.0;
if (weights.length == docFlags.length) {
for (int i = 0; i < weights.length; ++i) {
score += docFlags[i] * weights[i];
}
}
return score;
}
}getDoubleArray(CString key, CString sep)
カスタムパラメーターの値を指定されたデリミタで分割し、その部分を double[] として返します。
パラメーター:
key— 取得するカスタムパラメーターのキー。sep— パラメーター値を分割するために使用されるデリミタ。
戻り値: 分割および変換された値の double[]。キーが存在しない場合、または値を double に変換できない場合は null を返します。
import com.aliyun.opensearch.cava.framework.OpsDoc;
class BasicSimilarityScorer {
double[] weights;
boolean init(OpsScorerInitParams params) {
OpsKvPairs kvpairs = params.getRequest().getKVPairs();
weights = kvpairs.getDoubleArray("weights", ";"); // "0.5;0.3;0.2" を [0.5, 0.3, 0.2] に分割します
params.getDoc().requireAttribute("flags");
return true;
}
double score(OpsScoreParams params) {
long[] docFlags = params.getDoc().docFieldLongArray("flags");
if (docFlags == null || weights == null) {
return 0.0;
}
double score = 0.0;
if (weights.length == docFlags.length) {
for (int i = 0; i < weights.length; ++i) {
score += docFlags[i] * weights[i];
}
}
return score;
}
}