Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.