全部產品
Search
文件中心

OpenSearch:Distance

更新時間:Jul 13, 2024

簡介

Distance使用者計算兩個點之間的球面距離,主要用於按照距離遠近進行排序或者根據距離進行不同處理。參與Distance計算的兩個點,一個來自於文檔,一個來自於請求中的自訂參數。自訂參數是指在構造查詢請求時在kvpairs中添加的參數,可以通過opensearch的SDK或者手動構造kvpairs子句來添加自訂參數。

函數列表

函數原型

函數簡介

Distance create(OpsScorerInitParams params,CString longitudeAFieldName, CString latitudeAFieldName, CString longitudeBRequestKeyName,CString latitudeBRequestKeyName)

使用A、B兩個點的座標構造Distance對象

Distance create(OpsScorerInitParams params,CString longitudeAFieldName, CString latitudeAFieldName, CString longitudeBRequestKeyName, CString latitudeBRequestKeyName, CString outputName)

使用A、B兩個點的座標構造Distance對象,並在文檔中通過outputName輸出距離值

Distance create(OpsScorerInitParams params,CString geoPointAFieldName, CString geoPointBRequestKeyName)

使用A、B兩個GEO_POINT類型的點構造Distance對象

Distance create(OpsScorerInitParams params,CString geoPointAFieldName, CString geoPointBRequestKeyName, CString outputName)

使用A、B兩個GEO_POINT類型的點構造Distance對象,並在文檔中通過outputName輸出距離值

Distance create(OpsScorerInitParams params,CString geoPointAFieldName, CString geoPointBRequestKeyName, CString outputName, float defaultValue)

使用A、B兩個GEO_POINT類型的點構造Distance對象,並在文檔中通過outputName輸出距離值

double evaluate(OpsScoreParams params)

計算兩點之間的球面距離

函數詳情

Distance create(OpsScorerInitParams params, CString longitudeAFieldName, CString latitudeAFieldName, CString longitudeBRequestKeyName, CString latitudeBRequestKeyName)

建立Distance對象,需要分別指定A、B兩個點的經度和緯度,其中點A的經度和緯度來自於文檔中的指定欄位,點B的經度和緯度來自於查詢請求中自訂參數。參數列表:params — 算分輸入參數,詳情請參考OpsScoreParams手冊。longitudeAFieldName — 屬性欄位名稱,代表點A的經度,必須是常量。latitudeAFieldName — 屬性欄位名稱,代表點A的緯度,必須是常量。longitudeBRequestKeyName — 自訂參數名稱,代碼點B的經度,必須是常量。latitudeBRequestKeyName — 自訂參數名稱,代碼點B的緯度,必須是常量。

程式碼範例:

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.Distance;

class BasicSimilarityScorer {
    Distance _distance;

    boolean init(OpsScorerInitParams params) {
        _distance = Distance.create(params, "longitudeInDoc", "latitudeInDoc", 
                                    "longitudeInRequest", "latitudeInRequest");
        return true;
    }

    double score(OpsScoreParams params) {
        return _distance.evaluate(params);
    }
}

Distance create(OpsScorerInitParams params, CString longitudeAFieldName, CString latitudeAFieldName, CString longitudeBRequestKeyName, CString latitudeBRequestKeyName, CString outputName)

建立Distance對象,需要分別指定A、B兩個點的經度和緯度,其中點A的經度和緯度來自於文檔中的指定欄位,點B的經度和緯度來自於查詢請求中自訂參數。Distance計算之後,會在文檔中新增一個outputName欄位來儲存計算結果。參數列表:params — 算分輸入參數,詳情請參考OpsScoreParams手冊。longitudeAFieldName — 屬性欄位名稱,代表點A的經度,必須是常量。latitudeAFieldName — 屬性欄位名稱,代表點A的緯度,必須是常量。longitudeBRequestKeyName — 自訂參數名稱,代碼點B的經度,必須是常量。latitudeBRequestKeyName — 自訂參數名稱,代碼點B的緯度,必須是常量。outputName — distance分數輸出在文檔中的欄位名稱,必須是常量。

程式碼範例:

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.Distance;

class BasicSimilarityScorer {
    Distance _distance;

    boolean init(OpsScorerInitParams params) {
        _distance = Distance.create(params, "longitudeInDoc", "latitudeInDoc", 
                                    "longitudeInRequest", "latitudeInRequest", "output");
        return true;
    }

    double score(OpsScoreParams params) {
        return _distance.evaluate(params);
    }
}

Distance create(OpsScorerInitParams params, CString geoPointAFieldName, CString geoPointBRequestKeyName)

建立Distance對象,需要以GEO_POINT的形式指定A、B兩個點的座標,其中A點為文檔中的GEO_POINT欄位,B點為請求中自訂的參數。在定義B時,經度和維度需要使用空格分開,經度在前,維度在後,例如pointB:12.0 34.5。參數列表:params — 算分輸入參數,詳情請參考OpsScoreParams手冊。geoPointAFieldName — GEO_POINT類型的屬性欄位名稱,代表點A的座標,必須是常量。geoPointBRequestKeyName — 請求中自訂參數名稱,代碼點B的座標,必須是常量。程式碼範例:

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.Distance;

class BasicSimilarityScorer {
    Distance _distance;
    boolean init(OpsScorerInitParams params) {
        _distance = Distance.create(params, "location", "locationInRequest");
        return true;
    }

    double score(OpsScoreParams params) {
        return _distance.evaluate(params);
    }
}

Distance create(OpsScorerInitParams params, CString geoPointAFieldName, CString geoPointBRequestKeyName, CString outputName)

建立Distance對象,需要以GEO_POINT的形式指定A、B兩個點的座標,其中A點為文檔中的GEO_POINT欄位,B點為請求中自訂的參數。在定義B時,經度和維度需要使用空格分開,經度在前,維度在後,例如pointB:12.0 34.5。Distance計算之後,會在文檔中新增一個outputName欄位來儲存計算結果。參數列表:params — 算分輸入參數,詳情請參考OpsScoreParams手冊。geoPointAFieldName — GEO_POINT類型的屬性欄位名稱,代表點A的座標,必須是常量。geoPointBRequestKeyName — 請求中自訂參數名稱,代碼點B的座標,必須是常量。outputName — distance分數輸出在文檔中的欄位名稱,必須是常量。程式碼範例:

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.Distance;

class BasicSimilarityScorer {
    Distance _distance;
    boolean init(OpsScorerInitParams params) {
        _distance = Distance.create(params, "location", "locationInRequest", "output");
        return true;
    }

    double score(OpsScoreParams params) {
        return _distance.evaluate(params);
    }
}

Distance create(OpsScorerInitParams params, CString geoPointAFieldName, CString geoPointBRequestKeyName, CString outputName, float defaultValue)

建立Distance對象,需要以GEO_POINT的形式指定A、B兩個點的座標,其中A點為文檔中的GEO_POINT欄位,B點為請求中自訂的參數。在定義B時,經度和維度需要使用空格分開,經度在前,維度在後,例如pointB:12.0 34.5。Distance計算之後,會在文檔中新增一個outputName欄位來儲存計算結果。參數列表:params — 算分輸入參數,詳情請參考OpsScoreParams手冊。geoPointAFieldName — GEO_POINT類型的屬性欄位名稱,代表點A的座標,必須是常量。geoPointBRequestKeyName — 請求中自訂參數名稱,代碼點B的座標,必須是常量。outputName — distance分數輸出在文檔中的欄位名稱,必須是常量。defaultValue — 如果輸入的A、B座標非法,返回該值。

程式碼範例:

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.Distance;

class BasicSimilarityScorer {
    Distance _distance;
    boolean init(OpsScorerInitParams params) {
        _distance = Distance.create(params, "location", "locationInRequest", "output", 100.0);
        return true;
    }

    double score(OpsScoreParams params) {
        return _distance.evaluate(params);
    }
}

double evaluate(OpsScoreParams params)

Distance的算分介面,返回兩點間的球面距離。參數列表:params — 算分輸入參數,詳情請參考OpsScoreParams手冊。傳回值:返回兩點間的球面距離。