Todos los productos
Search
Centro de documentos

OpenSearch:OpsDoc

Última actualización: Sep 04, 2026

OpsDoc proporciona utilidades para acceder a campos de documentos y depurar plug-ins de ordenamiento en Cava. Durante el cálculo de puntuación, utilice una instancia de OpsDoc para leer valores de campos de atributo, compartir datos entre plug-ins mediante variables declaradas y generar información de rastreo durante las pruebas de búsqueda.

El sistema crea instancias de OpsDoc automáticamente; no es necesaria ninguna instanciación manual.

Contexto de puntuación

Una instancia de OpsDoc está disponible en dos fases de un plug-in de ordenamiento:

Fase

Método

Operaciones disponibles

Inicialización

boolean init(OpsScorerInitParams params)

requireAttribute, declareLongVariable, declareDoubleVariable

Cálculo de puntuación

double score(OpsScoreParams params)

Todas las funciones docField*, setLongVariable, getLongVariable, setDoubleVariable, getDoubleVariable, trace

Acceda a OpsDoc mediante params.getDoc() en cualquiera de las fases.

Importante

Los campos y variables declarados en init están disponibles durante el cálculo de puntuación. Si omite la declaración, no se podrán recuperar los valores de los campos y los métodos de obtención de variables devolverán 0 de forma predeterminada.

Funciones

Declaración de campos

Firma

Descripción

boolean requireAttribute(CString fieldName)

Declara un campo de atributo para su uso durante el cálculo de puntuación. Llame a esta función en init.

Acceso a campos

Todas las funciones de acceso a campos deben llamarse durante el cálculo de puntuación (en el método score), después de que el campo correspondiente se haya declarado con requireAttribute.

Firma

Tipo de campo

Tipo de retorno

Retorno cuando falta el campo o hay incompatibilidad de tipo

long docFieldLong(CString fieldName)

INT

long

0 (FLOAT/DOUBLE: entero más cercano; LITERAL/ARRAY: 0)

float docFieldFloat(CString fieldName)

FLOAT

float

—

double docFieldDouble(CString fieldName)

DOUBLE

double

—

CString docFieldLiteral(CString fieldName)

LITERAL

CString

—

long[] docFieldLongArray(CString fieldName)

INT_ARRAY

long[]

null

float[] docFieldFloatArray(CString fieldName)

FLOAT_ARRAY

float[]

null

double[] docFieldDoubleArray(CString fieldName)

DOUBLE_ARRAY

double[]

null

CString[] docFieldLiteralArray(CString fieldName)

LITERAL_ARRAY

CString[]

null

OpsGeoPoint docFieldGeoPoint(CString fieldName)

GEO_POINT

OpsGeoPoint

null

OpsTimestamp docFieldTimestamp(CString fieldName)

TIMESTAMP

OpsTimestamp

null

Variables

Utilice variables para pasar datos entre varios plug-ins de ordenamiento o para incluir valores calculados en los resultados de búsqueda.

Firma

Descripción

boolean declareLongVariable(CString variableName, boolean needSeraialize)

Declara una variable LONG. Llame a esta función en init. Máximo 30 variables por plug-in.

boolean declareDoubleVariable(CString variableName, boolean needSeraialize)

Declara una variable DOUBLE. Llame a esta función en init. Máximo 30 variables por plug-in.

void setLongVariable(CString variableName, long value)

Establece el valor de una variable LONG declarada. Llame a esta función durante el cálculo de puntuación.

void setDoubleVariable(CString variableName, long value)

Establece el valor de una variable DOUBLE declarada. Llame a esta función durante el cálculo de puntuación.

long getLongVariable(CString variableName)

Devuelve el valor de una variable LONG. Devuelve 0 si no está declarada o no se ha establecido.

double getDoubleVariable(CString variableName)

Devuelve el valor de una variable DOUBLE. Devuelve 0 si no está declarada o no se ha establecido.

Rastreo

Nota

Las funciones de rastreo solo están disponibles durante las pruebas de búsqueda en la página Search Test de la consola de OpenSearch. Las solicitudes de búsqueda normales no admiten rastreo. Dado que Cava procesa cada solicitud con memoria de ejecución limitada, el uso intensivo de llamadas de rastreo puede causar presión sobre la memoria; llame a las funciones de rastreo únicamente durante la depuración.

Para mostrar varias variables, llame a trace una vez por cada variable. Los parámetros pasados a las funciones de rastreo no se pueden modificar.

Cada función de rastreo tiene dos sobrecargas: una sin prefijo y otra con un CString prefix que etiqueta la salida para facilitar su revisión.

Firma

Tipo rastreado

void trace(byte value)

BYTE

void trace(CString prefix, byte value)

BYTE

void trace(short value)

SHORT

void trace(CString prefix, short value)

SHORT

void trace(int value)

INT

void trace(CString prefix, int value)

INT

void trace(long value)

LONG

void trace(CString prefix, long value)

LONG

void trace(float value)

FLOAT

void trace(CString prefix, float value)

FLOAT

void trace(double value)

DOUBLE

void trace(CString prefix, double value)

DOUBLE

void trace(CString value)

CString

void trace(CString prefix, CString value)

CString

Detalles de las funciones

requireAttribute

boolean requireAttribute(CString fieldName)

Declara un campo de atributo para su uso durante el cálculo de puntuación. Solo se pueden declarar los campos configurados como campos de atributo en la consola de OpenSearch. Llame a esta función en init; los campos no declarados durante la inicialización no se pueden leer en score.

Parámetros

Parámetro

Tipo

Descripción

fieldName

CString

Nombre del campo de atributo. Debe ser una constante.

Valor de retorno

Devuelve true si el campo se declara correctamente. Devuelve false si el campo no es un campo de atributo.

Ejemplo

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        // Declare the "price" attribute field before score() runs
        boolean ret = params.getDoc().requireAttribute("price");
        return ret;
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        float floatValue = doc.docFieldFloat("price");
        return floatValue;
    }
}

docFieldLong

long docFieldLong(CString fieldName)

Devuelve el valor de un campo INT como long. Si el campo es FLOAT o DOUBLE, el valor de retorno se redondea al entero más cercano. Si el campo es LITERAL o ARRAY, se devuelve 0.

Parámetros

Parámetro

Tipo

Descripción

fieldName

CString

Nombre del campo de atributo. Debe ser una constante.

Valor de retorno

El valor del campo como long.

Ejemplo

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        return params.getDoc().requireAttribute("count");
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        long count = doc.docFieldLong("count");
        return (double)count;
    }
}

docFieldFloat

float docFieldFloat(CString fieldName)

Devuelve el valor de un campo FLOAT como número de punto flotante.

Parámetros

Parámetro

Tipo

Descripción

fieldName

CString

Nombre del campo de atributo. Debe ser una constante.

Valor de retorno

El valor del campo como float.

Ejemplo

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        return params.getDoc().requireAttribute("count");
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        float count = doc.docFieldFloat("count");
        return (double)count;
    }
}

docFieldDouble

double docFieldDouble(CString fieldName)

Devuelve el valor de un campo DOUBLE como número de punto flotante de doble precisión.

Parámetros

Parámetro

Tipo

Descripción

fieldName

CString

Nombre del campo de atributo. Debe ser una constante.

Valor de retorno

El valor del campo como double.

Ejemplo

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        return params.getDoc().requireAttribute("count");
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        double count = doc.docFieldDouble("count");
        return count;
    }
}

docFieldLiteral

CString docFieldLiteral(CString fieldName)

Devuelve el valor de un campo LITERAL como CString.

Parámetros

Parámetro

Tipo

Descripción

fieldName

CString

Nombre del campo de atributo. Debe ser una constante.

Valor de retorno

El valor del campo como CString.

Ejemplo

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        return params.getDoc().requireAttribute("tag");
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        CString tag = doc.docFieldLiteral("tag");
        if (tag.equals("abc")) {
            return 100.0;
        }
        return 0;
    }
}

docFieldLongArray

long[] docFieldLongArray(CString fieldName)

Devuelve el valor de un campo INT_ARRAY como long[]. Devuelve null si el campo no existe, no se puede convertir al tipo objetivo o no es un campo ARRAY.

Parámetros

Parámetro

Tipo

Descripción

fieldName

CString

Nombre del campo de atributo. Debe ser una constante.

Valor de retorno

El valor del campo como long[], o null si el campo falta o es incompatible.

Ejemplo

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        return params.getDoc().requireAttribute("tags");
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        long[] tags = doc.docFieldLongArray("tags");
        // Always null-check array fields before accessing elements
        if (tags != null) {
            if (tags.length > 0) {
                return (double)tags[0];
            }
        }
        return 0;
    }
}

docFieldFloatArray

float[] docFieldFloatArray(CString fieldName)

Devuelve el valor de un campo FLOAT_ARRAY como float[]. Devuelve null si el campo no existe, no se puede convertir al tipo objetivo o no es un campo ARRAY.

Parámetros

Parámetro

Tipo

Descripción

fieldName

CString

Nombre del campo de atributo. Debe ser una constante.

Valor de retorno

El valor del campo como float[], o null si el campo falta o es incompatible.

Ejemplo

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        return params.getDoc().requireAttribute("tags");
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        float[] tags = doc.docFieldFloatArray("tags");
        if (tags != null) {
            if (tags.length > 0) {
                return (double)tags[0];
            }
        }
        return 0;
    }
}

docFieldDoubleArray

double[] docFieldDoubleArray(CString fieldName)

Devuelve el valor de un campo DOUBLE_ARRAY como double[]. Devuelve null si el campo no existe, no se puede convertir al tipo objetivo o no es un campo ARRAY.

Parámetros

Parámetro

Tipo

Descripción

fieldName

CString

Nombre del campo de atributo. Debe ser una constante.

Valor de retorno

El valor del campo como double[], o null si el campo falta o es incompatible.

Ejemplo

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        return params.getDoc().requireAttribute("tags");
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        double[] tags = doc.docFieldDoubleArray("tags");
        if (tags != null) {
            if (tags.length > 0) {
                return (double)tags[0];
            }
        }
        return 0;
    }
}

docFieldLiteralArray

CString[] docFieldLiteralArray(CString fieldName)

Devuelve el valor de un campo LITERAL_ARRAY como CString[]. Devuelve null si el campo no existe, no se puede convertir al tipo objetivo o no es un campo ARRAY.

Parámetros

Parámetro

Tipo

Descripción

fieldName

CString

Nombre del campo de atributo. Debe ser una constante.

Valor de retorno

El valor del campo como CString[], o null si el campo falta o es incompatible.

Ejemplo

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        return params.getDoc().requireAttribute("tags");
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        CString[] tags = doc.docFieldLiteralArray("tags");
        if (tags != null) {
            if (tags.length > 0 && tags[0].equals("abc")) {
                return 100.0;
            }
        }
        return 0;
    }
}

docFieldGeoPoint

OpsGeoPoint docFieldGeoPoint(CString fieldName)

Devuelve el valor de un campo GEO_POINT como OpsGeoPoint. Devuelve null si el campo no existe o si el tipo de campo no es válido. Se requiere una referencia de objeto OpsGeoPoint para usar esta función.

Parámetros

Parámetro

Tipo

Descripción

fieldName

CString

Nombre del campo de atributo. Debe ser una constante.

Valor de retorno

El valor del campo como OpsGeoPoint, o null si el campo falta o no es válido.

Ejemplo

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        return params.getDoc().requireAttribute("location");
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        OpsGeoPoint location = doc.docFieldGeoPoint("location");
        double longitude = location.getLongitude();
        if (longitude < 0 || longitude > 180.0) {
            return 0;
        }
        return 1.0;
    }
}

docFieldTimestamp

OpsTimestamp docFieldTimestamp(CString fieldName)

Devuelve el valor de un campo TIMESTAMP como OpsTimestamp. Devuelve null si el campo no existe o si el tipo de campo no es válido. Se requiere una referencia de objeto OpsTimestamp para usar esta función.

Parámetros

Parámetro

Tipo

Descripción

fieldName

CString

Nombre del campo de atributo. Debe ser una constante.

Valor de retorno

El valor del campo como OpsTimestamp, o null si el campo falta o no es válido.

Ejemplo

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        return params.getDoc().requireAttribute("timestamp");
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        OpsTimestamp timestamp = doc.docFieldTimestamp("timestamp");
        return (double)timestamp.getValue();
    }
}

declareLongVariable

boolean declareLongVariable(CString variableName, boolean needSeraialize)

Declara una variable LONG para pasar datos entre plug-ins de ordenamiento o incluirla en los resultados de búsqueda. Llame a esta función en init. Cada plug-in admite un máximo de 30 variables declaradas; superar este límite genera un error.

Parámetros

Parámetro

Tipo

Descripción

variableName

CString

Nombre de la variable. Debe ser una constante.

needSeraialize

boolean

Indica si se debe incluir la variable en los documentos de resultados de búsqueda. Debe ser una constante. Valores válidos: true, false.

Valor de retorno

Devuelve true si la variable se declara correctamente. Devuelve false en caso contrario.

Ejemplo

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        // Declare "v_int64" and include it in search result documents
        return params.getDoc().declareLongVariable("v_int64", true);
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        doc.setLongVariable("v_int64", 100);

        long longValue = doc.getLongVariable("v_int64");
        doc.trace("long value1: ", longValue);
        return 0;
    }
}

declareDoubleVariable

boolean declareDoubleVariable(CString variableName, boolean needSeraialize)

Declara una variable DOUBLE para pasar datos entre plug-ins de ordenamiento o incluirla en los resultados de búsqueda. Llame a esta función en init. Cada plug-in admite un máximo de 30 variables declaradas; superar este límite genera un error.

Parámetros

Parámetro

Tipo

Descripción

variableName

CString

Nombre de la variable. Debe ser una constante.

needSeraialize

boolean

Indica si se debe incluir la variable en los documentos de resultados de búsqueda. Debe ser una constante. Valores válidos: true, false.

Valor de retorno

Devuelve true si la variable se declara correctamente. Devuelve false en caso contrario.

Ejemplo

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        return params.getDoc().declareDoubleVariable("v_double", true);
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        doc.setDoubleVariable("v_double", 100);

        long doubleValue = doc.getDoubleVariable("v_double");
        doc.trace("double value1: ", doubleValue);
        return 0;
    }
}

setLongVariable

void setLongVariable(CString variableName, long value)

Establece el valor de una variable LONG declarada. Llame a esta función durante el cálculo de puntuación. La variable debe haberse declarado en init.

Parámetros

Parámetro

Tipo

Descripción

variableName

CString

Nombre de la variable.

value

long

Valor a asignar.

setDoubleVariable

void setDoubleVariable(CString variableName, long value)

Establece el valor de una variable DOUBLE declarada. Llame a esta función durante el cálculo de puntuación. La variable debe haberse declarado en init.

Parámetros

Parámetro

Tipo

Descripción

variableName

CString

Nombre de la variable.

value

long

Valor a asignar.

getLongVariable

long getLongVariable(CString variableName)

Devuelve el valor de una variable LONG declarada. Llame a esta función durante el cálculo de puntuación. Devuelve 0 si la variable no se ha declarado o si no se ha establecido su valor.

Parámetros

Parámetro

Tipo

Descripción

variableName

CString

Nombre de la variable.

Valor de retorno

El valor de la variable como long. Devuelve 0 si la variable no está declarada o no se ha establecido.

getDoubleVariable

double getDoubleVariable(CString variableName)

Devuelve el valor de una variable DOUBLE declarada. Llame a esta función durante el cálculo de puntuación. Devuelve 0 si la variable no se ha declarado o si no se ha establecido su valor.

Parámetros

Parámetro

Tipo

Descripción

variableName

CString

Nombre de la variable.

Valor de retorno

El valor de la variable como double. Devuelve 0 si la variable no está declarada o no se ha establecido.

trace (sin prefijo)

Todas las sobrecargas de trace siguientes generan el valor directamente, sin etiqueta.

void trace(byte value)
void trace(short value)
void trace(int value)
void trace(long value)
void trace(float value)
void trace(double value)
void trace(CString value)

Parámetro

Parámetro

Tipo

Descripción

value

Variable

El valor que se mostrará en la salida de rastreo.

Ejemplo (BYTE)

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        return true;
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        byte value = 1;
        doc.trace(value);
        return 0.0;
    }
}

trace (con prefijo)

Todas las sobrecargas de trace siguientes generan un valor etiquetado, lo que facilita la localización de variables específicas en la salida de rastreo.

void trace(CString prefix, byte value)
void trace(CString prefix, short value)
void trace(CString prefix, int value)
void trace(CString prefix, long value)
void trace(CString prefix, float value)
void trace(CString prefix, double value)
void trace(CString prefix, CString value)

Parámetros

Parámetro

Tipo

Descripción

prefix

CString

Etiqueta que se antepone a la salida de rastreo. Ayuda a localizar la variable durante las pruebas de búsqueda.

value

Variable

El valor que se mostrará.

Ejemplo (DOUBLE con prefijo)

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

class BasicSimilarityScorer {
    boolean init(OpsScorerInitParams params) {
        return true;
    }

    double score(OpsScoreParams params) {
        OpsDoc doc = params.getDoc();
        double value = 1.0;
        doc.trace("double value: ", value);
        return 0.0;
    }
}

Errores comunes

requireAttribute devuelve false

requireAttribute devuelve false cuando el campo especificado no está configurado como campo de atributo en la consola de OpenSearch. Compruebe que el campo aparece en Attribute Fields en la consola antes de declararlo en init.

El acceso a campos de matriz devuelve null

docFieldLongArray, docFieldFloatArray, docFieldDoubleArray y docFieldLiteralArray devuelven null cuando:

  • El campo no existe en el documento.

  • El tipo de campo no coincide (por ejemplo, llamar a docFieldLongArray en un campo FLOAT_ARRAY).

  • El campo no es de tipo ARRAY.

Compruebe siempre si el valor de retorno es nulo antes de acceder a elementos de la matriz o llamar a .length.

getLongVariable o getDoubleVariable devuelve 0 inesperadamente

Ambos métodos de obtención devuelven 0 cuando la variable no se ha declarado en init o cuando no se ha llamado a setLongVariable/setDoubleVariable antes del método de obtención. Confirme lo siguiente:

  1. La variable está declarada en init mediante declareLongVariable o declareDoubleVariable.

  2. Se llama al método de establecimiento en score antes que al método de obtención.

Si utiliza el valor de la variable en divisiones o lógica condicional, compruebe que el valor no sea cero antes de operar con él.

La declaración de variable devuelve false o genera un error

Cada plug-in admite un máximo de 30 variables declaradas en total, sumando los tipos LONG y DOUBLE. Superar este límite provoca un error. Revise las declaraciones de variables en init y elimine las que no se utilicen.

No se puede recuperar el valor del campo durante score

Si las funciones docField* devuelven valores predeterminados inesperados (como 0 para tipos numéricos), es probable que el campo no se haya declarado en init mediante requireAttribute. La declaración de campos debe realizarse antes del cálculo de puntuación; agregar llamadas a requireAttribute en score no tiene ningún efecto.