Compartir a través de


Cláusula RANK BY

Los resultados de una consulta incluyen las filas devueltas por la consulta y un valor de clasificación para cada fila si la columna rank se incluye en la cláusula SELECT. El motor de búsqueda calcula los valores de clasificación y se devuelven como enteros en el intervalo cero a 1000. Para que los resultados de clasificación sean más significativos, la consulta puede controlar cómo se calculan los valores de clasificación sin procesar en la cláusula RANK BY.

Este tema se organiza de la siguiente manera:

Cláusula RANK BY

La sintaxis de la cláusula RANK BY es la siguiente:

WHERE ( <search_condition> ) 
RANK BY [ ( ] <rank_specification> [ ) ]

La cláusula RANK BY se aplica al search_condition inmediatamente anterior, especificando eficazmente una clasificación inferior o superior para las filas devueltas por esa condición de búsqueda que las filas devueltas por otra condición de búsqueda. Se requieren paréntesis que rodean el search_condition. Los paréntesis que rodean la especificación de clasificación son opcionales.

Se puede aplicar más de una cláusula RANK BY a una sola condición. Puede incluir cláusulas RANK BY adicionales una después de la otra mediante paréntesis.

Nota

Los predicados de texto completo devuelven valores de clasificación en el intervalo de 0 a 1000. Los valores de clasificación de todos los documentos coincidentes con un predicado de texto no completo son 1000. Las modificaciones en los valores de clasificación deben tener en cuenta esta información.

 

La parte rank_specification de la cláusula RANKBY identifica una o varias funciones que se aplicarán a los valores de clasificación. La función WEIGHT aplica un multiplicador al valor de clasificación sin procesar para una fila devuelta. Cuanto menor sea el multiplicador, menor será el valor de clasificación resultante. La función COERCION se puede usar para multiplicar, agregar o establecer un valor de clasificación específico para una fila devuelta. Cada especificación de clasificación puede incluir cero o una función WEIGHT y cero o más funciones COERCION. Si las funciones WEIGHT y COERCION se incluyen en una cláusula RANK BY, la función WEIGHT debe ser primero.

Función WEIGHT

La sintaxis de la función WEIGHT es:

WEIGHT ( <weight_multipler> ) 

El multiplicador debe ser un decimal comprendido entre 0,001 y 1,000. El valor de clasificación sin procesar devuelto por el predicado de condición de búsqueda se multiplica por el multiplicador de peso para establecer un nuevo valor de clasificación.

En el ejemplo siguiente, la función WEIGHT proporciona documentos con la palabra "Theresa" en el campo System.Document.LastAuthor la mitad del valor de clasificación de documentos con "Theresa" en el campo System.Author:

WHERE CONTAINS ( System.Author,'"Theresa"' ) 
         RANK BY WEIGHT ( 1.000 )
      OR
      CONTAINS ( System.Document.LastAuthor,'"Theresa"' ) 
         RANK BY WEIGHT ( 0.500 ) 

 

Nota

Las características de ponderación de columna de predicado CONTAINS y FREETEXT admiten un formato abreviado mediante dos puntos entre el término de búsqueda y el multiplicador ("software":0.25). La cláusula RANK BY no admite el formulario abreviado.

 

Existe una limitación al usar RANK BY WEIGHT: no funciona con cláusulas CONTAINS que usan condiciones booleanas; Por ejemplo, no se permite el ejemplo siguiente:

CONTAINS ( System.Author,'"Theresa" OR "Teresa"' ) RANK BY WEIGHT ( 0.400 )

Función COERCION

La función de coerción de clasificación se puede usar para cambiar el valor de clasificación devuelto por suma o multiplicación o asignando un valor específico.

La sintaxis de la función COERCION es:

COERCION ( <coercion_operation> , <coercion_value> )

El valor de coerción es un valor entero.

En la tabla siguiente se describen las opciones de operaciones de coerción disponibles.

Operación de coerción Descripción Intervalo de valores
ABSOLUTO El valor de clasificación devuelto es el valor especificado en el valor de coerción. De 0 a 1000
AGREGAR El valor de clasificación devuelto es la suma del valor de clasificación sin procesar y el valor de coerción especificado. De 0 a 1000
MULTIPLICAR El valor de clasificación devuelto es el producto del valor de clasificación sin procesar y el valor de coerción especificado. De 0 a 1000
MINMAX El valor de clasificación devuelto es la asignación lineal de la puntuación de clasificación de 0 a 1000 del elemento coincidente de CONTAINS o CONTAINSSEMANTIC entre los valores de coerción mínimo y máximo especificados. De 0 a 1000

Importante

La búsqueda solo puede devolver valores de clasificación en el intervalo de 0 a 1000.

En el ejemplo siguiente se usa la función COERCION para establecer todos los documentos con "computer" en el título para tener un rango de 1000, a la vez que se reduce en un trimestre el rango de documentos que contienen "equipo" y "software" en el título.

WHERE CONTAINS ( System.Title, 'computer' )
        RANK BY COERCION ( ABSOLUTE , 1000 )
        OR 
       CONTAINS ( System.Title, '"computer" AND "software"' )
        RANK BY COERCION ( MULTIPLY, 0.750 ) 

En el ejemplo siguiente se usa la función COERCION para asignar la clasificación sin procesar de documentos con el término "computer" a un intervalo comprendido entre 500 y 800 en función de sus coincidencias semánticas.

WHERE CONTAINSSEMANTIC('text', *, 'computer', 1033)
OR CONTAINSSEMANTIC('image', *, 'computer', 1033)
RANK BY COERCION(MINMAX, 500, 800)
ORDER BY System.Search.Rank DESC

 

Merge(<merge_operation>)

Se usa con la cláusula RANK BY para agregar las clasificaciones de todos los resultados para generar una lista de resultados clasificados finales de combinación.

La sintaxis de la función MERGE es la siguiente:

RANK BY MERGE ( <merge_operation>) 

Operaciones de combinación

En la tabla siguiente se describen las operaciones admitidas para el parámetro merge_operation .

Operación de combinación Descripción
CONVEXCOMBINATION Este algoritmo de combinación se debe usar exclusivamente cuando la consulta incluye las siguientes cláusulas: CONTAINS (búsqueda léxica), CONTAINSSEMANTIC('Text',...) y CONTAINSSEMANTIC('Image'...) (búsqueda semántica entre texto e imágenes). Combina puntuaciones de estas tres cláusulas mediante un enfoque de suma ponderada, lo que proporciona mayor prioridad a las puntuaciones léxicas asignando mayores pesos en comparación con las puntuaciones semánticas. La clasificación final estará entre 0 y 1000.
MIN Este algoritmo de combinación es el comportamiento predeterminado en el caso de un cursor AND. Selecciona la clasificación mínima de todos los resultados.
MAX Este algoritmo de combinación es el comportamiento predeterminado en el caso de un cursor OR. Selecciona la clasificación máxima de todos los resultados.

Nota

El uso de RANK BY MERGE(MIN) con un cursor OR o RANK BY MERGE(MAX) con un cursor AND no producirá los resultados esperados. Se recomienda usar explícitamente la función MERGE con la cláusula RANK BY solo junto con el operador CONVEXCOMBINATION al combinar los resultados de búsqueda léxica y semántica en un único conjunto de resultados.

Example

En el ejemplo siguiente se muestra el uso de la función MERGE para buscar elementos léxicos y semánticamente coincidentes con la palabra "computer" en los campos "Image" o "Text". A continuación, los resultados de búsqueda se clasifican mediante el operador RANK BY MERGE, que agrega puntuaciones de todos los resultados para generar una lista clasificada final.

WHERE (CONTAINS(*,'computer', 1033)  
OR CONTAINSSEMANTIC('Image', *, 'computer', 1033)  
OR CONTAINSSEMANTIC('Text', System.ItemNameDisplay, 'computer', 1033)  
OR CONTAINSSEMANTIC('Text', *, 'computer', 1033))  
RANK BY MERGE(CONVEXCOMBINATION) 

Para obtener más información sobre el predicado CONTAINSSEMANTIC, vea El predicado CONTAINSSEMANTIC.