簡介
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手冊。傳回值:返回兩點間的球面距離。