简介

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手册。返回值:返回两点间的球面距离。