Partager via


Clause RANK BY

Les résultats d’une requête incluent à la fois les lignes retournées par la requête et une valeur de classement pour chaque ligne si la colonne de classement est incluse dans la clause SELECT. Les valeurs de classement sont calculées par le moteur de recherche et sont retournées sous forme d’entiers de la plage zéro à 1 000. Pour rendre les résultats de classement plus significatifs, la requête peut contrôler la façon dont les valeurs de classement brutes sont calculées dans la clause RANK BY.

Cette rubrique est organisée comme suit :

Clause RANK BY

La syntaxe de la clause RANK BY est la suivante :

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

La clause RANK BY est appliquée à la search_condition immédiatement précédente, en spécifiant efficacement un rang inférieur ou supérieur pour les lignes retournées par cette condition de recherche que les lignes retournées par une autre condition de recherche. Les parenthèses entourant la search_condition sont requises. Les parenthèses entourant la spécification de classement sont facultatives.

Plusieurs clauses RANK BY peuvent être appliquées à une seule condition. Vous pouvez inclure des clauses RANK BY supplémentaires l’une après l’autre à l’aide de parenthèses.

Note

Les prédicats de texte intégral retournent des valeurs de classement comprises entre 0 et 1 000. Les valeurs de classement pour tous les documents mis en correspondance par un prédicat sans texte intégral sont 1 000. Les modifications apportées aux valeurs de classement doivent tenir compte de ces informations.

 

La partie rank_specification de la clause RANKBY identifie une ou plusieurs fonctions à appliquer aux valeurs de classement. La fonction WEIGHT applique un multiplicateur à la valeur de classement brute d’une ligne retournée. Plus le multiplicateur est petit, plus la valeur de classement résultante est faible. La fonction COERCION peut être utilisée pour multiplier, ajouter ou définir une valeur de classement spécifique pour une ligne retournée. Chaque spécification de classement peut inclure zéro ou une fonction WEIGHT et zéro ou plusieurs fonctions COERCION. Si les fonctions WEIGHT et COERCION sont incluses dans une clause RANK BY, la fonction WEIGHT doit être d’abord.

FONCTION WEIGHT

La syntaxe de la fonction WEIGHT est la suivante :

WEIGHT ( <weight_multipler> ) 

Le multiplicateur doit être une décimale comprise entre 0,001 et 1,000. La valeur de classement brute retournée par le prédicat de condition de recherche est multipliée par le multiplicateur de poids pour définir une nouvelle valeur de classement.

Dans l’exemple suivant, la fonction WEIGHT donne aux documents le mot « Theresa » dans le champ System.Document.LastAuthor la moitié de la valeur de classement des documents avec « Theresa » dans le champ System.Author :

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

 

Note

Les fonctionnalités de pondération des colonnes CONTAINS et FREETEXT prennent en charge un format abrégé à l’aide d’un signe deux-points entre le terme de recherche et le multiplicateur (« software » :0.25). La clause RANK BY ne prend pas en charge le formulaire raccourci.

 

Il existe une limitation lors de l’utilisation de RANK BY WEIGHT : elle ne fonctionne pas avec les clauses CONTAINS qui utilisent des conditions booléennes ; Par exemple, l’exemple suivant n’est pas autorisé :

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

FONCTION FORÇAGE

La fonction de contrainte de classement peut être utilisée pour modifier la valeur de classement retournée par addition ou multiplication ou en lui attribuant une valeur spécifique.

La syntaxe de la fonction COERCION est la suivante :

COERCION ( <coercion_operation> , <coercion_value> )

La valeur de contrainte est une valeur entière.

Le tableau suivant décrit les paramètres d’opération de contrainte disponibles.

Opération de contrainte Description Plage de valeurs
ABSOLU La valeur de classement retournée est la valeur spécifiée dans la valeur de contrainte. 0 à 1000
AJOUTER La valeur de classement retournée est la somme de la valeur de classement brute et de la valeur de contrainte spécifiée. 0 à 1000
MULTIPLIER La valeur de classement retournée est le produit de la valeur de classement brute et de la valeur de contrainte spécifiée. 0 à 1000
MINMAX La valeur de classement retournée est le mappage linéaire du score de classement 0-1000 de l’élément correspondant de CONTAINS ou CONTAINSSEMANTIC entre les valeurs minimales et maximales spécifiées. 0 à 1000

Important

La recherche peut retourner des valeurs de classement uniquement dans la plage de 0 à 1 000.

L’exemple suivant utilise la fonction COERCION pour définir tous les documents avec « ordinateur » dans le titre pour avoir un rang de 1 000, tout en réduisant d’un quart le rang des documents contenant à la fois « ordinateur » et « logiciel » dans le titre.

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

L’exemple suivant utilise la fonction COERCION pour mapper le rang brut des documents avec le terme « ordinateur » à une plage comprise entre 500 et 800 en fonction de leurs correspondances sémantiques.

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>)

Utilisé avec la clause RANK BY pour agréger les rangs de tous les résultats pour générer une liste finale classée des résultats de fusion.

La syntaxe de la fonction MERGE est la suivante :

RANK BY MERGE ( <merge_operation>) 

Opérations de fusion

Le tableau suivant décrit les opérations prises en charge pour le paramètre merge_operation .

Opération de fusion Description
CONVEXCOMBINATION Cet algorithme de fusion doit être utilisé exclusivement lorsque la requête inclut les clauses suivantes : CONTAINS (recherche lexicale), CONTAINSSEMANTIC('Text',...) et CONTAINSSEMANTIC('Image'...) (recherche sémantique entre du texte et des images). Il combine les scores de ces trois clauses à l’aide d’une approche de somme pondérée, donnant une priorité plus élevée aux scores lexicals en leur affectant des pondérations supérieures par rapport aux scores sémantiques. Le classement final sera compris entre 0 et 1000.
MIN Cet algorithme de fusion est le comportement par défaut dans le cas d’un curseur AND. Il sélectionne le rang minimal dans tous les résultats.
MAX Cet algorithme de fusion est le comportement par défaut dans le cas d’un curseur OR. Il sélectionne le rang maximal dans tous les résultats.

Note

L’utilisation de RANK BY MERGE(MIN) avec un curseur OR ou RANK BY MERGE(MAX) avec un curseur AND ne génère pas les résultats attendus. Il est recommandé d’utiliser explicitement la fonction MERGE avec la clause RANK BY uniquement conjointement avec l’opérateur CONVEXCOMBINATION lors de la fusion des résultats lexicals et sémantiques dans un jeu de résultats unique.

Example

L’exemple suivant illustre l’utilisation de la fonction MERGE pour rechercher des éléments lexicalement et sémantiquement correspondant au mot « ordinateur » dans les champs « Image » ou « Texte ». Les résultats de la recherche sont ensuite classés à l’aide de l’opérateur RANK BY MERGE qui agrège les scores de tous les résultats pour générer une liste classée finale.

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) 

Pour plus d’informations sur le prédicat CONTAINSSEMANTIC, consultez le prédicat CONTAINSSEMANTIC.