Classement et tri
Apprenez à trier les résultats de requête pour FAST Search Server 2010 for SharePoint.
Dernière modification : jeudi 1 septembre 2011
Vous pouvez spécifier le mode de tri des résultats de la requête pour FAST Search Server 2010 for SharePoint de quatre façons :
Dans cet article
Procédure de spécification du tri dans une demande de requête
Trier les résultats de la recherche par pertinence
Trier les résultats de la recherche par valeur des propriétés gérées
Trier les résultats de la recherche par formule
Tri des résultats de la recherche par ordre aléatoire
Trier par ordre de priorité Vous permet de trier le résultat de la requête par pertinence (classement par ordre de priorité).
Trier par propriété gérée Vous permet de trier le résultat de la requête en fonction de la valeur d’une ou de plusieurs propriétés gérées.
Trier par formule Vous permet de trier le résultat de la requête en fonction d’une formule spécifiée dans la demande de requête.
Trier par ordre aléatoire Vous permet de trier le résultat de la requête par ordre aléatoire ou d’ajouter un composant aléatoire à l’ordre de tri.
S’applique à : SharePoint Server 2010
Procédure de spécification du tri dans une demande de requête
Si vous utilisez le service Web de requête, vous devez spécifier les critères de tri via l’SortByProperties, élément dans le schéma Microsoft.Search.Query. Cet élément contient un ou plusieurs éléments SortByProperty qui représentent chacun un niveau dans la spécification du tri.
Si vous utilisez le modèle objet de requête, vous devez spécifier les critères de tri via la propriété SortList de la classe KeywordQuery. Cette propriété renvoie une collection d’objets Sort qui représentent chacun un niveau dans la spécification du tri.
Si vous avez plusieurs niveaux de tri, celui-ci s’exécute dans l’ordre où il est défini. Après le tri de premier niveau, le niveau suivant n’est pertinent que pour les résultats ayant la même valeur que les critères de tri spécifiés pour le premier niveau.
Vous pouvez spécifier un sens de tri individuel pour chaque niveau dans la spécification du tri.
Trier les résultats de la recherche par pertinence
Le mécanisme de tri par défaut consiste à trier les résultats de la requête par pertinence (classement par ordre de priorité). En d’autres termes, FAST Search Server 2010 for SharePoint place en premier les résultats les plus pertinents dans le jeu de résultats de la requête. Pour plus d’informations sur le réglage du classement selon la pertinence, voir Amélioration de la pertinence pour FAST Search Server 2010 for SharePoint.
Si vous souhaitez utiliser un profil de classement par ordre de priorité autre que le profil de classement par défaut, vous pouvez spécifier le nom du profil de classement par ordre de priorité dans la spécification du tri.
Si vous triez par ordre de priorité, le résultat est toujours trié dans l’ordre décroissant.
En plus d’utiliser un profil de classement, vous pouvez également affecter le calcul du classement dans la chaîne de requête des deux manières suivantes.
Opérateur RANK ou XRANK dans le Langage de requête FQL (FAST Query Language). Ces opérateurs vous permettent d’appliquer une amplification de classement conditionnelle si une condition de requête spécifique est remplie.
Poids de pertinence pour le classement dynamique. Lors de l’utilisation du Langage de requête FQL (FAST Query Language), vous pouvez spécifier un poids de pertinence pour chaque opérateur STRING.
Trier les résultats de la recherche par valeur des propriétés gérées
Vous pouvez spécifier le tri du résultat de la requête en fonction de la valeur d’une ou de plusieurs propriétés gérées dans le résultat de la requête. En d’autres termes, FAST Search Server 2010 for SharePoint effectue le tri en fonction de l’ensemble des résultats qui correspondent à la requête.
Vous pouvez trier en fonction de propriétés de texte et numériques. Pour les propriétés de texte, le tri est basé sur un tri de chaînes de texte standard. Pour les propriétés numériques (y compris les propriétés gérées de type Datetime), le tri est basé sur une valeur numérique.
Trier les résultats de la recherche par formule
Vous pouvez définir le tri du résultat de la requête en fonction d’une spécification de tri basée sur une formule mathématique afin de créer la valeur de tri.
Le tri par formule est une extension de la fonctionnalité de tri à un et plusieurs niveaux pour les résultats de la requête. Cette fonctionnalité vous permet de spécifier une formule à la place d’une propriété gérée en tant que critère de tri.
Grâce à la fonctionnalité de tri par formule, vous pouvez appliquer des opérations mathématiques à la valeur d’une ou de plusieurs propriétés gérées pour chaque élément du résultat de la requête.
Voici des exemples de fonctionnalités qui peuvent être implémentées à l’aide de cette fonctionnalité :
algorithme des K plus proches voisins pour la classification de documents ;
distance euclidienne ou distance de Manhattan pour le calcul des distances géographiques ;
valeur préférée, par exemple, pour le tri de documents en fonction de la distance d’une valeur de propriété gérée spécifique par rapport à une valeur préférée.
Cette fonctionnalité n’inclut pas le contrôle des paramètres de classement dynamique statistiques, tels que la fréquence et la proximité des termes.
La formule est évaluée de gauche à droite et respecte l’ordre de priorité des opérateurs mathématiques standard. En d’autres termes, les fonctions et les groupes de parenthèses sont évalués en premier, les opérations de multiplication et de division sont effectuées ensuite, les opérations d’addition et de soustraction sont effectuées en dernier.
Important
Le résultat final d’une formule doit être compris dans la plage de valeurs d’un entier signé 32 bits. Sinon, le tri risque d’être incorrect.
Spécification de la formule de tri dans une requête
Vous devez définir une formule de tri à la place d’une propriété gérée dans la spécification de tri de la demande de requête.
La spécification de tri respecte le format suivant :
[formula:<sort-formula>]
Dans le format, <sort-formula> est l’expression de formule de tri.
Notes
Les crochets font partie de la syntaxe de spécification de tri.
Le sens de tri par défaut est Descending. Vous pouvez également utiliser une formule qui trie par valeur croissante, par exemple si la formule spécifie une distance géographique.
Voici un exemple qui montre comment spécifier le tri par formule avec un ordre de tri croissant dans une demande du service Web de requête à l’aide de l’élément SortByProperties.
<SortByProperties>
<SortByProperty name="[formula:abs(2000-size)]" direction="Ascending" />
</SortByProperties>
Pour plus d’informations sur la façon d’ajouter la spécification de tri à une requête, voir Procédure de spécification du tri dans une demande de requête.
Utilisation de propriétés gérées dans la formule
Vous pouvez appliquer une formule de tri à la valeur des propriétés gérées de type Integer, Decimal et Datetime. Vous devez activer le tri pour la propriété gérée spécifiée dans le schéma d’index.
Pour les propriétés gérées de type Decimal, la valeur est multipliée par 10^(chiffres décimaux) avant d’être utilisée dans l’évaluation de la formule.
Pour les propriétés gérées de type Datetime, la valeur est convertie en centièmes de nanosecondes depuis le 1er janvier 29 000 av. J.C., avant d’être utilisée dans l’évaluation de la formule. L’année compte 366 jours.
Expressions de formule de tri
Le tableau 1 liste les fonctions qui peuvent être utilisées dans l’expression de formule de tri. L’expression ne doit pas contenir d’espaces.
Tableau 1. Fonctions pour les expression de formule de tri
Fonction |
Description |
---|---|
+ |
Spécifie l’addition. |
- |
Spécifie la soustraction. |
* |
Spécifie la multiplication. |
/ |
Spécifie la division. Notes Par défaut, une division par zéro génère une exception, et la requête est renvoyée avec une erreur. En utilisant l’opérateur errtolast, vous pouvez éviter l’erreur de requête et placer les éléments défaillants à la fin du jeu de résultats. |
rank |
Mot clé spécial qui représente le classement dynamique d’un élément. Exemple : abs(rank-100) utilise la distance par rapport à la valeur de classement 100 comme critère de tri. |
[0-9.]+ |
Spécifie que les nombres peuvent être fournis en tant que valeurs entières ou doubles. Exemples : 503, 3.14, 5.4352262 |
[a-z0-9]+ |
Spécifie qu’une séquence de caractères non reconnue en tant que nom de fonction doit être traitée comme un nom de propriété gérée. Vous devez activer le tri pour la propriété gérée spécifiée dans le Schéma d’index (FAST Search Server for SharePoint). Exemple : vous pouvez définir une propriété gérée nommée height en ayant activé le tri. Cela vous permet d’utiliser « height » en tant qu’expression dans la formule. La formule utilise la valeur de la propriété gérée height. |
( and ) |
Permet de regrouper les calculs selon l’ordre de priorité approprié. Exemple : 4*(3+2) |
sqrt(n) |
Racine carrée de n. |
exp(n) |
Fonction exponentielle équivalente à pow(2.71828182846,n). |
log(n) |
Logarithme naturel de n. |
abs(n) |
Valeur absolue de n. |
ceil(n) |
Plafond de n. En d’autres termes, si n n’est pas un nombre entier, effectue un arrondi supérieur au nombre entier suivant. Si n est un nombre entier, utilise n. |
floor(n) |
Plancher de n. En d’autres termes, si n n’est pas un nombre entier, effectue un arrondi inférieur au nombre entier suivant. Si n est un nombre entier, utilise n. |
round(n) |
Arrondi de n au nombre entier pair le plus proche. |
sin(n) |
Sinus de n radians. |
cos(n) |
Cosinus de n radians. |
tan(n) |
Tangente de n radians. |
asin(n) |
Arcsinus, en radians, de n. |
acos(n) |
Arcosinus, en radians, de n. |
atan(n) |
Arctangente, en radians, de n. |
pow(x,y) |
Valeur de x élevée à la puissance y. |
atan2(y,x) |
Arctangente à deux arguments de l’angle en radians entre l’axe x positif et la coordonnée cartésienne spécifiée (x,y). |
bucket(b,n1,n2,…) |
Opérateur qui peut servir à fournir des valeurs discrètes pour les plages de distribution de valeurs spécifiées d’une expression. L’expression b peut être une propriété gérée ou toute autre expression de formule. Les arguments n1, n2, … représentent des seuils numériques. Vous pouvez spécifier un nombre arbitraire de seuils de compartiments. Une valeur donnée pour l’expression d’entrée b est arrondie au seuil numérique inférieur le plus proche fourni. Si elle est inférieure au seuil le plus bas fourni, la valeur résultante est zéro. |
errtolast(x) |
Opérateur qui permet de contrôler le mode de gestion des exceptions de formule ; x peut représenter n’importe quelle expression de formule. Si le calcul de cette expression de formule aboutit à une exception mathématique pour un élément du jeu de résultats, par exemple une division par zéro, les éléments de ce type s’affichent à la fin de la liste de tri, indépendamment du sens de tri spécifié. |
Caractéristiques de performance pour le tri par formule
L’utilisation d’une formule de tri implique que les calculs de la formule soient appliqués à l’ensemble des éléments correspondants dans le jeu de résultats. En d’autres termes, l’impact des performances de la requête dépend du nombre d’éléments qui correspondent à la requête.
Les formules longues qui comportent de nombreux opérateurs nécessitent davantage de temps de traitement que les formules courtes.
Utilisation du tri par formule pour la distance géographique
Vous pouvez utiliser le tri par formule pour appliquer un classement par ordre de priorité en fonction de la distance. Pour ce faire, vous devez inclure les propriétés gérées qui représentent la latitude et la longitude de chaque élément.
Vous pouvez par exemple utiliser l’une des formules standard suivantes :
Distance de Manhattan.
Distance euclidienne. Voir l’exemple 2.
Formule d’Haversine.
Important
Vous devez utiliser les propriétés gérées de type entier pour les valeurs de latitude et de longitude . Côté contenu, vous pouvez convertir ces valeurs en un composant d’extensibilité d’un pipeline externe. Côté requête, vous pouvez effectuer la même conversion sur le client de la requête.
Exemples
Les exemples suivants montrent comment spécifier la formule de tri dans une demande du service Web de requête.
Exemple 1. Place les éléments dont la propriété gérée height est la plus proche de 20 en haut de la liste des résultats.
<SortByProperties>
<SortByProperty name="[formula:abs(20-height)]" direction="Ascending" />
</SortByProperties>
Exemple 2. Tri par distance euclidienne 3D à partir d’une position de base donnée (par exemple, position de l’utilisateur), en fonction d’informations de position fournies dans les propriétés gérées latitude, longitude et height. La formule suivante fournit la distance euclidienne 3D, étant donné la position de base 50/100/200 (latitude/longitude/hauteur) :
sqrt(pow(50-latitude,2)+pow(100-longitude,2)+pow(200-height,2))
Si vous souhaitez appliquer un tri des résultats basé sur la distance (sans combiner la distance avec d’autres paramètres dans une formule), vous pouvez supprimer le composant sqrt() car il ne modifie pas la séquence de tri. Cela permet d’améliorer les performances des requêtes.
<SortByProperties>
<SortByProperty name="[formula:pow(50-latitude,2)+pow(100-longitude,2)+pow(200-height,2)]"
direction="Ascending" />
</SortByProperties>
Exemple 3. Arrondit les valeurs de size en compartiments, en arrondissant les valeurs vers l’une des valeurs inférieures 0, 5, 15, 50, 100. Trie en plaçant les plus grandes valeurs en premier.
<SortByProperties>
<SortByProperty name="[formula:bucket(size,5,15,50,100)]" direction="Ascending" />
</SortByProperties>
Utilisation de Trier par formule dans le service Web de requête
Suivez les étapes dans Procédure pas à pas : Interrogation de FAST Search Server à partir d’une application cliente et étendez le code de façon à ajouter une spécification de tri par formule comme décrit précédemment dans l’Exemple 1 ci-dessus.
Remplacez la définition de la chaîne queryXML2, de manière à ajouter une spécification de tri par formule dans la requête :
// queryXML2 is the part of the XML after the query string.
string queryXML2 = @"
</QueryText>
</Context>
<ResultProvider>FASTSearch</ResultProvider>
<Range>
<Count>10</Count>
</Range>
<SortByProperties>
<SortByProperty name='[formula:abs(20-height)]' direction='Ascending' />
</SortByProperties>
</Query>
</QueryPacket>";
Tri des résultats de la recherche par ordre aléatoire
Vous pouvez appliquer le tri aléatoire sur le résultat de la requête, ou ajouter un composant aléatoire au tri des résultats.
La spécification de tri aléatoire respecte le format suivant :
[random:seed=<seed>:hashfield=<managed property>:addtorankmax=<max random value>]
Notes
Les crochets font partie de la syntaxe de spécification de tri.
Le tableau 2 explique les paramètres du tri aléatoire.
Tableau 2. Paramètres du tri aléatoire
Paramètre |
Description |
Obligatoire |
---|---|---|
seed |
Départ de la génération de la valeur aléatoire. La valeur de départ est une entrée de la fonction qui génère un nombre aléatoire. Ce nombre aléatoire est utilisé dans le tri final. L’utilisation de la seule option seed fournit un ensemble de résultats de requête triés aléatoirement. L’ordre de tri pour la même requête (avec utilisation de la même valeur de départ) peut être modifiée après la mise à jour d’un index. |
Oui |
hashfield |
Propriété gérée utilisée comme valeur de hachage pour la génération aléatoire. Vous pouvez utiliser ce paramètre pour vous assurer que l’ordre de tri de la même requête (avec utilisation de la même valeur de départ) ne change pas après la mise à jour d’un index. La propriété gérée doit être de type entier et le tri doit être activé dans le schéma de l’index. Vous pouvez remplir cette propriété gérée à l’aide de valeurs uniques ou aléatoires (par exemple, un numéro de séquence rempli par la phase de traitement d’un élément). |
Non |
addtorankmax |
Utilisez ce paramètre si vous voulez appliquer une randomisation limitée du résultat de la requête, où celui-ci continue à être principalement trié par pertinence. Une valeur aléatoire comprise entre 0 (zéro) et la valeur spécifiée pour ce paramètre sera ajoutée à la valeur de pertinence de chaque élément de l’ensemble de résultats. Vous pouvez ainsi randomiser les résultats au sein d’un intervalle. Notes Il s’agit de la valeur de pertinence originale (antérieure au tri) fournie avec le résultat de la requête, et non de la pertinence incluant la valeur aléatoire. |
Non |
En fournissant la même valeur de départ pour les requêtes égales, les éléments seront présentés dans le même ordre. Cela vous permet de conserver le même ordre aléatoire lors de la pagination à travers les résultats de la recherche. Utilisez le paramètre hashfield si vous voulez conserver le même ordre aléatoire quand la mise à jour d’un index se produit accidentellement entre les requêtes.
Exemples
Les exemples suivants montrent comment spécifier le tri aléatoire dans une demande du service Web de requête.
Exemple 1. Tri aléatoire de l’ensemble des résultats.
<SortByProperties>
<SortByProperty name="[random:seed=5432]" />
</SortByProperties>
Exemple 2. Tri aléatoire de l’ensemble des résultats. Conservez la même séquence aléatoire pour la même requête avec la même valeur de départ même s’il se produit une modification d’index. Une propriété gérée personnalisée nommée hashvalue doit être disponible dans le schéma d’index, et remplie à l’aide de valeurs numériques aléatoires ou séquentielles pour tous les éléments indexés.
<SortByProperties>
<SortByProperty name="[random:seed=6543:hashfield=hashvalue]" />
</SortByProperties>
Exemple 3. Ajoutez une valeur aléatoire comprise entre 0 et 200 à la valeur de pertinence de chaque élément. Cela permet de retrier l’ensemble des résultats dans une certaine limite.
<SortByProperties>
<SortByProperty name="[random:seed=1234:addtorankmax=200]" />
</SortByProperties>
Voir aussi
Référence
SortByProperties, élément dans le schéma Microsoft.Search.Query
Concepts
Amélioration de la pertinence pour FAST Search Server 2010 for SharePoint
Schéma d’index (FAST Search Server for SharePoint)
Intégration d’un composant de traitement d’élément externe
Procédure pas à pas : Interrogation de FAST Search Server à partir d’une application cliente