すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:OpsKvPairs

最終更新日:Apr 02, 2026

OpsKvPairs を使用すると、CAVA スコアラー内でクエリの kvpairs 句からカスタム キーバリューパラメーターを読み取ることができます。7 つのメソッドはすべて同じパターンに従います。キーを検索し、生の CString 値または型変換された結果を返します。

仕組み

カスタムパラメーターは、次のチェーンを通じて検索クエリからスコアラーに伝達されます。

  1. 呼び出し元は、kvpairs 句をクエリに追加します (例: kvpairs=flag:abc)。

  2. init() で、request.getKVPairs() を呼び出して OpsKvPairs インスタンスを一度取得します。

  3. 適切なゲッターを使用して、パラメーター値を読み取り、変換します。

  4. 必要に応じて、score() で値を適用します。

パラメーターは score() ではなく init() で読み取ります。init() はクエリごとに1回実行され、score() は候補ドキュメントごとに1回実行されます。init() で解析することで、数千のスコアリングされたドキュメントにわたる冗長な作業を回避できます。

メソッド

メソッド戻り値
CString getValue(CString key)生の CString
long getLong(CString key)long
float getFloat(CString key)float
double getDouble(CString key)double
long[] getLongArray(CString key, CString sep)long[]
float[] getFloatArray(CString key, CString sep)float[]
double[] getDoubleArray(CString key, CString sep)double[]

メソッドの詳細

getValue

シグネチャ: CString getValue(CString key)

パラメーター:

パラメーター説明
keyCString読み取るカスタムパラメーターのキー

[戻り値:] パラメーター値を CString として返します。キーが kvpairs 句に存在しない場合は、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 {
    CString flag;

    boolean init(OpsScorerInitParams params) {
        OpsRequest request = params.getRequest();
        OpsKvPairs kvpairs = request.getKVPairs();
        flag = kvpairs.getValue("flag"); // "flag" が kvpairs 句にない場合は null
        return true;
    }

    double score(OpsScoreParams params) {
        if (flag != null && flag.equals("abc")) {
            // apply custom logic
        }
        return 0.0;
    }
}

getLong

シグネチャ: long getLong(CString key)

パラメーター:

パラメーター説明
keyCString読み取るカスタムパラメーターのキー

戻り値: long 型に変換されたパラメーター値。キーが存在しない場合、または値が数値として解析できない場合 (例: 非数値文字が含まれている場合) は 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.OpsKvPairs;

class BasicSimilarityScorer {
    long flag;

    boolean init(OpsScorerInitParams params) {
        OpsRequest request = params.getRequest();
        OpsKvPairs kvpairs = request.getKVPairs();
        flag = kvpairs.getLong("flag"); // "flag" が存在しないか、有効な整数でない場合は 0
        return true;
    }

    double score(OpsScoreParams params) {
        if (flag == 1) {
            // apply custom logic
        }
        return 0.0;
    }
}

getFloat

シグネチャ: float getFloat(CString key)

パラメーター:

パラメーター説明
keyCString読み取るカスタムパラメーターのキー

戻り値: float 型に変換されたパラメーター値。キーが存在しない場合、または値が float 型に変換できない場合は 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.OpsKvPairs;

class BasicSimilarityScorer {
    double ratio;

    boolean init(OpsScorerInitParams params) {
        OpsRequest request = params.getRequest();
        OpsKvPairs kvpairs = request.getKVPairs();
        ratio = kvpairs.getDouble("ratio"); // "ratio" が存在しないか、有効な double 型でない場合は 0
        return true;
    }

    double score(OpsScoreParams params) {
        if (ratio > 1) {
            // カスタムロジックを適用
        }
        return 0.0;
    }
}

getDouble

シグネチャ: double getDouble(CString key)

パラメーター:

パラメーター説明
keyCString読み取るカスタムパラメーターのキー

戻り値: double 型に変換されたパラメーター値。キーが存在しない場合、または値が double 型に変換できない場合は 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.OpsKvPairs;

class BasicSimilarityScorer {
    double ratio;

    boolean init(OpsScorerInitParams params) {
        OpsRequest request = params.getRequest();
        OpsKvPairs kvpairs = request.getKVPairs();
        ratio = kvpairs.getDouble("ratio"); // "ratio" が存在しないか、有効な double でない場合は 0
        return true;
    }

    double score(OpsScoreParams params) {
        if (ratio > 1) {
            // apply custom logic
        }
        return 0.0;
    }
}

getLongArray

シグネチャ: long[] getLongArray(CString key, CString sep)

パラメーター:

パラメーター説明
keyCString読み取るカスタムパラメーターのキー
sepCString値の文字列を個々の要素に分割するために使用されるデリミタ

戻り値: デリミタ付きの値の文字列から解析された long[] 型配列。キーが存在しない場合、または値が long 型に変換できない場合は null を返します。

実行時エラーを回避するために、配列要素にアクセスする前に必ず null をチェックし、length > 0 であることを確認してください。

例:

package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsKvPairs;

class BasicSimilarityScorer {
    long[] flags;

    boolean init(OpsScorerInitParams params) {
        OpsRequest request = params.getRequest();
        OpsKvPairs kvpairs = request.getKVPairs();
        // "flags" の値を ";" で分割します (例: "1;2;3" は [1, 2, 3] になります)。
        flags = kvpairs.getLongArray("flags", ";");
        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]) {
            // apply custom logic
        }
        return 0.0;
    }
}

getFloatArray

シグネチャ: float[] getFloatArray(CString key, CString sep)

パラメーター:

パラメーター説明
keyCString読み取るカスタムパラメーターのキー
sepCString値の文字列を個々の要素に分割するために使用されるデリミタ

戻り値: デリミタ付きの値の文字列から解析された float[] 型配列。キーが存在しない場合、または値が float 型に変換できない場合は null を返します。

配列にアクセスする前に null をチェックしてください。weightsdocFlags の長さが異なる場合、内積ループは実行されません。

例:

package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsKvPairs;

class BasicSimilarityScorer {
    float[] weights;

    boolean init(OpsScorerInitParams params) {
        OpsRequest request = params.getRequest();
        OpsKvPairs kvpairs = request.getKVPairs();
        // "weights" の値を ";" で分割します (例: "0.5;0.3;0.2" は [0.5, 0.3, 0.2] になります)。
        weights = kvpairs.getFloatArray("weights", ";");
        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 0.0;
    }
}

getDoubleArray

シグネチャ: double[] getDoubleArray(CString key, CString sep)

パラメーター:

パラメーター説明
keyCString読み取るカスタムパラメーターのキー
sepCString値の文字列を個々の要素に分割するために使用されるデリミタ

戻り値: デリミタ付きの値の文字列から解析された double[] 型配列。キーが存在しない場合、または値が double 型に変換できない場合は null を返します。

配列にアクセスする前に null をチェックしてください。weightsdocFlags の長さが異なる場合、内積ループは実行されません。

例:

package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsKvPairs;

class BasicSimilarityScorer {
    double[] weights;

    boolean init(OpsScorerInitParams params) {
        OpsRequest request = params.getRequest();
        OpsKvPairs kvpairs = request.getKVPairs();
        // "weights" の値を ";" で分割します (例: "0.5;0.3;0.2" は [0.5, 0.3, 0.2] になります)。
        weights = kvpairs.getDoubleArray("weights", ";");
        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 0.0;
    }
}