全部產品
Search
文件中心

OpenSearch:OpsKvPairs

更新時間:Jul 13, 2024

簡介

OpsKvPairs使用者擷取使用者自訂的kvpairs資訊,關於如果自訂kvpair,請參考自訂kvpairs子句。在擷取使用者自訂參數過程中,OpsKvPairs還提供了一些函數,方便使用者對定義的參數做進一步的處理,比如講定義的參數轉換成特定資料類型的數組。

函數列表

函數原型

函數簡介

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)

擷取自訂參數,並返回一個長整型數組

float[] getFloatArray(CString key, CString sep)

擷取CString類型的參數

double[] getDoubleArray(CString key, CString sep)

擷取CString類型的參數

函數詳情

CString getValue(CString key)

從kvpairs中擷取CString類型的參數。參數列表:key — 參數在kvpairs中的key傳回值:返回自訂的參數,如果key不存在返回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 kvparis = request.getKVPairs();
        flag = kvparis.getValue("flag"); //假設kvpairs中有一個CString類型的flag變數
        return true;
    }

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

long getLong(CString key)

從kvpairs中擷取long類型的參數。參數列表:key — 參數在kvpairs中的key傳回值:返回自訂的參數,如果key不存在或者無法轉成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 kvparis = request.getKVPairs();
        flag = kvparis.getLong("flag"); //假設kvpairs中有一個長整型的flag變數
        return true;
    }

    double score(OpsScoreParams params) {
        if (flag == 1) {
            //do something
        }
        return 0.0;
    }      
}

float getFloat(CString key)

從kvpairs中擷取float類型的參數。參數列表:key — 參數在kvpairs中的key傳回值:返回自訂的參數,如果key不存在或者無法轉成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 {
    float ratio;
    boolean init(OpsScorerInitParams params) {
        OpsRequest request = params.getRequest();
        OpsKvPairs kvparis = request.getKVPairs();
        ratio = kvparis.getFloat("ratio"); //假設kvpairs中有一個float類型的ratio變數
        return true;
    }

    double score(OpsScoreParams params) {
        if (ratio > 1) {
            //do something
        }
        return 0.0;
    }      
}

double getDouble(CString key)

從kvpairs中擷取double類型的參數。參數列表:key — 參數在kvpairs中的key傳回值:返回自訂的參數,如果key不存在或者無法轉成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 kvparis = request.getKVPairs();
        ratio = kvparis.getDouble("ratio"); //假設kvpairs中有一個double類型的ratio變數
        return true;
    }

    double score(OpsScoreParams params) {
        if (ratio > 1) {
            //do something
        }
        return 0.0;
    }      
}

long[] getLongArray(CString key, CString sep)

擷取kvpairs中的參數,參數的值為按照指定分隔字元分隔的long型數組。參數列表:key — 參數在kvpairs中的key傳回值:返回自訂的參數,如果key不存在或者無法轉成long類型返回null。

程式碼範例:

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 kvparis = request.getKVPairs();
        flags = kvparis.getLongArray("flags", ";"); 
        params.getDoc().requireAttribute("flag");
        return true;
    }

    double score(OpsScoreParams params) {
        long docFlag = params.getDoc().docFieldLong("flag");
        if (flag != null && flags.length > 0 && docFlag == flags[0]) {
            //do something
        }
        return 0.0;
    }      
}

float[] getFloatArray(CString key, CString sep)

擷取kvpairs中的參數,參數的值為按照指定分隔字元分隔的float型數組。參數列表:key — 參數在kvpairs中的key傳回值:返回自訂的參數,如果key不存在或者無法轉成float類型返回null。

程式碼範例:

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 kvparis = request.getKVPairs();
        weights = kvparis.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 score;
    }      
}

double[] getDoubleArray(CString key, CString sep)

擷取kvpairs中的參數,參數的值為按照指定分隔字元分隔的double型數組。參數列表:key — 參數在kvpairs中的key傳回值:返回自訂的參數,如果key不存在或者無法轉成double類型返回null。

程式碼範例:

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 kvparis = request.getKVPairs();
        weights = kvparis.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 score;
    }      
}