Todos los productos
Search
Centro de documentos

OpenSearch:Directivas de ordenamiento

Última actualización: Sep 04, 2026

Los motores de búsqueda requieren un alto rendimiento en la recuperación de datos. Para satisfacer esta demanda, el sistema proporciona un proceso de ordenamiento en dos fases: ordenamiento preliminar y ordenamiento fino. La fase de ordenamiento preliminar selecciona rápidamente un subconjunto de documentos de alta calidad (los primeros N resultados) de la recuperación inicial. Estos documentos pasan luego por un ordenamiento fino para obtener una puntuación detallada y devolver los resultados más relevantes. El ordenamiento preliminar afecta principalmente al rendimiento, mientras que el ordenamiento fino determina la calidad final del resultado. Por lo tanto, el ordenamiento preliminar debe ser simple y eficiente, y utilizar solo los factores clave del ordenamiento fino. Ambas fases se configuran mediante expresiones de ordenamiento.

Una expresión de ordenamiento (también conocida como fórmula de clasificación) le permite personalizar cómo se clasifican los resultados de búsqueda en su aplicación. Usted especifica una expresión en la solicitud de consulta para ordenar los resultados. Una expresión de ordenamiento admite operaciones básicas (aritméticas, relacionales, lógicas, bit a bit y condicionales), funciones matemáticas y fine sort functions. Para aplicaciones comunes como foros y sitios de noticias, OpenSearch proporciona prácticas recomendadas para relevance sorting. Puede usarlas como plantillas, modificarlas según las características de sus datos y crear sus propias expresiones.

Antes de configurar la clasificación basada en relevancia (ordenamiento fino), debe comprender el comportamiento de ordenamiento predeterminado del sistema. Una vez que se encuentran los documentos que coinciden con la consulta, entran en la fase de ordenamiento. Para obtener más información, consulte sort clause. Si no especifica una cláusula de ordenamiento, o si la cláusula incluye explícitamente RANK, comienza la etapa de puntuación por relevancia.

El diseño de expresiones de ordenamiento para el ordenamiento preliminar y el fino depende de sus requisitos de búsqueda. El artículo sobre relevance sorting ofrece una guía detallada sobre cómo diseñar y seleccionar factores de clasificación para varios escenarios típicos.

Nota

En una expresión de ordenamiento, debe usar valores numéricos o campos numéricos para operaciones básicas como aritméticas, relacionales, lógicas y condicionales. La mayoría de las funciones no admiten operaciones con tipos de cadena.

Operaciones básicas

Operación

Operador

Descripción

Operación unaria

-

El signo menos (-). Niega el valor de una expresión. Ejemplos: -1, -max(width).

Operación aritmética

+, -, *, /

Ejemplo: width / 10

Operación relacional

==, !=, >, <, >=, <=

Ejemplo: width>=400

Operación lógica

and, or, !

Ejemplos: width>=400 and height >= 300, !(a > 1 and b < 2)

Operación bit a bit

&,

, ^

Ejemplo: 3 & (price ^ pubtime) + (price

pubtime)

Operación condicional

if(cond, thenValue, elseValue)

Si la expresión cond se evalúa como un valor distinto de cero, la función devuelve thenValue; de lo contrario, devuelve elseValue. Por ejemplo, if(2, 3, 5) devuelve 3, y if(0, 3, 5) devuelve 5. Nota: No se admiten tipos de campo de cadena como literal o text. El valor devuelto debe estar dentro del rango int32.

Operación in

i in [value1, value2, …, valuen]

Si i está en el conjunto [value1, value2, ..., valuen], la expresión devuelve 1; de lo contrario, devuelve 0. Por ejemplo, 2 in [2, 4, 6] devuelve 1, y 3 in [2, 4, 6] devuelve 0.

Funciones matemáticas

Función

Descripción

max(a, b)

Devuelve el mayor entre a y b.

min(a, b)

Devuelve el menor entre a y b.

ln(a)

Devuelve el logaritmo natural de a.

log2(a)

Devuelve el logaritmo en base 2 de a.

log10(a)

Devuelve el logaritmo en base 10 de a.

sin(a)

Devuelve el seno de a.

cos(a)

Devuelve el coseno de a.

tan(a)

Devuelve la tangente de a.

asin(a)

Devuelve el arcoseno de a.

acos(a)

Devuelve el arcocoseno de a.

atan(a)

Devuelve la arcotangente de a.

ceil(a)

Devuelve el entero más pequeño que es mayor o igual a a. Por ejemplo, ceil(4.2) devuelve 5.

floor(a)

Devuelve el entero más grande que es menor o igual a a. Por ejemplo, floor(4.6) devuelve 4.

sqrt(a)

Devuelve la raíz cuadrada de a. Por ejemplo, sqrt(4) devuelve 2.

pow(a,b)

Devuelve el valor de a elevado a la potencia de b. Por ejemplo, pow(2, 3) devuelve 8.

now()

Devuelve la hora actual en segundos desde la época Unix (00:00:00 UTC, 1 de enero de 1970).

random()

Devuelve un valor aleatorio entre 0 y 1.

Funciones integradas

OpenSearch proporciona una variedad de rough sort functions, incluidas funciones LBS, de texto y de actualidad. Puede combinarlas en una expresión de ordenamiento para implementar una clasificación por relevancia eficaz.

Plugin de Cava

Cava es un lenguaje de programación de alto rendimiento desarrollado por el equipo del motor de OpenSearch basado en LLVM. Su sintaxis es similar a Java y su rendimiento es comparable a C++. Cava es un lenguaje orientado a objetos que admite compilación just-in-time (JIT) y diversas comprobaciones de seguridad para garantizar la robustez del programa. Mediante Cava y las bibliotecas proporcionadas, puede crear plugins de ordenamiento personalizados en OpenSearch. En comparación con el uso de una expresión de ordenamiento estándar, un plugin de Cava ofrece las siguientes ventajas:

  • Mayor personalización: Cava proporciona funciones de sintaxis más ricas que las expresiones, como bucles for y definiciones de funciones y clases, lo que le permite implementar requisitos empresariales complejos.

  • Mantenimiento más sencillo: Un plugin de Cava es más legible y fácil de mantener que una expresión de ordenamiento compleja.

  • Menor curva de aprendizaje: La sintaxis de Cava es similar a Java, por lo que resulta fácil de aprender para los desarrolladores de Java.

Nota: Solo puede configurar el plugin de Cava para una aplicación exclusiva.

Procedimiento

Esta sección utiliza una función de relevancia de texto como ejemplo para mostrar cómo configurar las directivas de ordenamiento preliminar y ordenamiento fino.

  1. Cree una directiva de ordenamiento preliminar. En la OpenSearch console, seleccione OpenSearch High-performance Search Edition en la esquina superior izquierda. Vaya a Search Configuration Center > Sort Configuration > Policy Management y haga clic en Create. Introduzca un Policy Name, establezca Scope en Rough Sort y Type en Expression, y luego haga clic en Next.

    Seleccione "static_bm25" como función de puntuación y establezca el peso en "10". Un peso de 10 significa que la puntuación se multiplica por 10 durante el cálculo. También puede agregar un campo de búsqueda al ordenamiento. El campo debe ser un campo de atributo y de tipo numérico, como INT, DOUBLE o FLOAT. Cuando establece un peso para el campo, el valor del campo multiplicado por su peso se suma a la puntuación de ordenamiento.

    Por ejemplo, agregue el campo sale_price al ordenamiento y establezca el peso del campo pid en 0.08.

    Una vez completada la configuración, regrese a la página Policy Management. Aparecerá el mensaje "Sort policy configured successfully". Haga clic en Search Test para comprobar la configuración de ordenamiento.

  2. Cree una directiva de ordenamiento fino. En la consola de OpenSearch, haga clic en Create. Introduzca un Policy Name, establezca Scope en Fine Sort y Type en Expression, y luego haga clic en Next.

    Seleccione 'text_relevance' en las funciones integradas, introduzca el nombre de un campo del índice entre paréntesis y haga clic en Complete. En el paso Sort Configuration, utilice las listas desplegables Field y Built-in Function para generar la expresión de ordenamiento text_relevance(brand) y luego haga clic en Complete. La configuración habrá finalizado y regresará a la página Policy Management.

  3. Consulte los resultados del ordenamiento. En la página Search Test, configure los parámetros para el ordenamiento preliminar y el fino, y habilite la opción Show Sort Details. Establezca el parámetro first_rank_name en test_1 (ordenamiento preliminar) y el parámetro second_rank_name en test_2 (ordenamiento fino). Luego podrá ver el cálculo de la puntuación para cada función.

    Los detalles del ordenamiento aparecen debajo de cada resultado de búsqueda. Esto incluye la puntuación total de ordenamiento (por ejemplo, 10000.2259030193) y los resultados individuales de cada expresión, como static_bm250, static_bm250*10 y text_relevance(brand).

    Nota

    La puntuación de documentos ocurre en dos fases: ordenamiento preliminar y ordenamiento fino. Los documentos recuperados por una consulta y filtrados pasan primero por el ordenamiento preliminar. Se seleccionan los documentos con mayor puntuación según la expresión de ordenamiento preliminar. Luego, se puntúan con precisión los primeros N resultados mediante la expresión de ordenamiento fino para devolver los resultados óptimos.

    • Si solo se configura una directiva de ordenamiento preliminar, la puntuación del documento es (10000 + el resultado de la expresión de ordenamiento preliminar). Si la puntuación calculada supera los 20,000, se limita a 20,000.

    • Si solo se configura una directiva de ordenamiento fino, la puntuación del documento es (10000 + el resultado de la expresión de ordenamiento fino). No hay límite superior para la puntuación.

    • Si se configuran tanto directivas de ordenamiento preliminar como fino, la puntuación final para los documentos que entran en la fase de ordenamiento fino es (10000 + el resultado de la expresión de ordenamiento fino). La puntuación final para los documentos restantes es (10000 + el resultado de la expresión de ordenamiento preliminar). Si esta puntuación supera los 20,000, se limita a 20,000.

    • Puede crear varias reglas de ordenamiento preliminar y fino. Sin embargo, una solicitud de consulta solo puede usar una regla de ordenamiento preliminar y una de ordenamiento fino a la vez.

    Importante
    • El parámetro first_rank_name solo admite un nombre de expresión de ordenamiento. No puede usar varias expresiones de ordenamiento preliminar al mismo tiempo.

    • El parámetro second_rank_name solo admite un nombre de expresión de ordenamiento. No puede usar varias expresiones de ordenamiento fino al mismo tiempo.

Ejemplos de configuración del SDK

Ejemplo del SDK de Java:

// Set the rough and fine sort expressions. This example uses the default policies.
Rank rank = new Rank();
rank.setFirstRankName("default"); // The name of the rough sort policy.
rank.setSecondRankName("default"); // The name of the fine sort policy.
rank.setReRankSize(5); // The number of documents for fine sorting.

Ejemplo del SDK de PHP:

// Specify the rough sort expression.
$params->setFirstRankName('default');
// Specify the fine sort expression.
$params->setSecondRankName('default');

Notas:

  • Si configura directivas de ordenamiento preliminar y fino predeterminadas en la consola, pero también especifica directivas diferentes en su código, las directivas definidas en el código tienen prioridad al momento de la consulta.

  • Para ver los detalles de ordenamiento en su código:

    Agregue el parámetro format:fulljson a la cláusula config.

    En el resultado, sortExprValues contiene la información de puntuación del documento.

    "sortExprValues": [
        "10000.0399786383"
    ],
    "property": { ... }

    sortExprValues es una matriz que contiene los valores de los campos de ordenamiento especificados en la cláusula sort. Por ejemplo, para la cláusula:

    sort=-price;-RANK

    sortExprValues contendría el valor del campo price seguido de la puntuación final del documento.

    Si no especifica una cláusula sort, sortExprValues contiene únicamente la puntuación final del documento.