Les moteurs de recherche exigent des performances de récupération élevées. Pour répondre à cette exigence, OpenSearch met en œuvre un processus de tri en deux étapes : le tri grossier et le tri fin. L'étape de tri grossier sert de filtre préliminaire permettant d'identifier rapidement les documents de haute qualité parmi les résultats initiaux. Les N premiers documents issus de cette phase sont ensuite soumis au tri fin, où ils font l'objet d'un nouveau calcul de score détaillé. Par conséquent, le tri grossier impacte significativement les performances, tandis que le tri fin influence principalement la qualité du classement. Une expression de tri grossier doit donc rester simple et efficace, en n'utilisant que les facteurs les plus critiques issus de l'étape de tri fin. Vous configurez le tri grossier et le tri fin à l'aide d'expressions de tri.
Une expression de tri (formule de classement) vous permet de personnaliser l'ordre de classement des résultats de recherche. Vous pouvez classer les résultats en spécifiant l'expression dans une requête. Une expression de tri prend en charge les opérations de base (arithmétiques, relationnelles, logiques, binaires et conditionnelles), les fonctions mathématiques et les fonctionnalités de classement. Pour les applications courantes telles que les forums et les sites d'actualités, OpenSearch propose des modèles d'expression. Sélectionnez un modèle adapté et modifiez-le pour créer votre propre expression.
Avant de configurer le classement par pertinence (tri fin), familiarisez-vous avec la politique de tri par défaut. Après la récupération des documents par la requête et les autres clauses, ceux-ci entrent dans l'étape de tri. Pour plus d'informations, consultez la rubrique relative à la clause de tri. Si vous ne spécifiez aucune clause de tri ou si celle-ci indique explicitement RANK, la phase de calcul du score de pertinence est déclenchée.
La conception de vos expressions de tri grossier et de tri fin dépend de vos exigences en matière de recherche. Pour obtenir des détails sur la conception des facteurs de classement dans plusieurs scénarios typiques, consultez l'article Pertinence en pratique dans les bonnes pratiques.
Les expressions de tri nécessitent des valeurs numériques ou des champs numériques pour toutes les opérations de base, telles que les opérations arithmétiques, relationnelles, logiques et conditionnelles. La plupart des fonctions ne prennent pas en charge les champs de type chaîne.
Opérations de base
|
Opération |
Opérateur |
Description |
||
|
Unaire |
- |
Opérateur de négation. Inverse la valeur d'une expression. Exemple : -1 ou -max(width). |
||
|
Arithmétique |
+, -, *, / |
Exemple : width / 10. |
||
|
Relationnelle |
==, !=, >, <, >=, <= |
Exemple : width>=400. |
||
|
Logique |
and, or, ! |
Exemple : width>=400 and height >= 300, ou !(a > 1 and b < 2). |
||
|
Binaire |
&, \ |
, ^ |
Exemple : 3 & (price ^ pubtime) + (price \ |
pubtime). |
|
Conditionnelle |
if(cond, thenValue, elseValue) |
Si |
||
|
in |
i in (value1, value2, …, valuen) |
Si |
Fonctions mathématiques
|
Fonction |
Description |
|
max(a, b) |
Renvoie la plus grande valeur entre a et b. |
|
min(a, b) |
Renvoie la plus petite valeur entre a et b. |
|
ln(a) |
Renvoie le logarithme naturel de a. |
|
log2(a) |
Renvoie le logarithme en base 2 de a. |
|
log10(a) |
Renvoie le logarithme en base 10 de a. |
|
sin(a) |
Fonction sinus. |
|
cos(a) |
Fonction cosinus. |
|
tan(a) |
Fonction tangente. |
|
asin(a) |
Fonction arcsinus. |
|
acos(a) |
Fonction arccosinus. |
|
atan(a) |
Fonction arctangente. |
|
ceil(a) |
Arrondit a à l'entier supérieur le plus proche. Par exemple, ceil(4.2) renvoie 5. |
|
floor(a) |
Arrondit a à l'entier inférieur le plus proche. Par exemple, floor(4.6) renvoie 4. |
|
sqrt(a) |
Renvoie la racine carrée de a. Par exemple, sqrt(4) renvoie 2. |
|
pow(a,b) |
Renvoie a élevé à la puissance b. Par exemple, pow(2, 3) renvoie 8. |
|
now() |
Renvoie l'heure actuelle en secondes depuis l'époque Unix (00:00:00 UTC, 1er janvier 1970). |
|
random() |
Renvoie une valeur aléatoire comprise dans l'intervalle [0, 1]. |
Fonctions intégrées
OpenSearch propose un ensemble complet de fonctions intégrées, notamment pour les services basés sur la localisation (LBS), le texte et la fraîcheur des données. Combinez ces fonctions dans vos expressions de tri pour obtenir un classement par pertinence puissant.
Plug-in Cava
Cava est un langage de programmation haute performance développé par l'équipe du moteur OpenSearch sur la base de LLVM. Sa syntaxe s'apparente à celle de Java, tandis que ses performances sont comparables à celles du C++. Il s'agit d'un langage de programmation orienté objet qui prend en charge la compilation juste-à-temps (JIT) et intègre diverses vérifications de sécurité pour garantir la robustesse des programmes. Utilisez Cava et ses bibliothèques pour créer des plug-ins de tri personnalisés dans OpenSearch. Par rapport aux expressions de tri standard, les plug-ins Cava offrent les avantages suivants :
Personnalisation accrue : Cava propose des fonctionnalités syntaxiques plus étendues que les expressions, telles que les boucles
foret les définitions de fonctions et de classes, ce qui vous permet d'implémenter une logique métier personnalisée.Maintenance simplifiée : Les plug-ins de tri écrits en Cava sont plus lisibles et plus faciles à maintenir que les expressions complexes.
Courbe d'apprentissage réduite : La syntaxe de Cava étant similaire à celle de Java, les développeurs Java peuvent l'assimiler rapidement.
Remarque : Les plug-ins Cava sont pris en charge uniquement pour les applications dédiées.
Procédure
Cet exemple illustre la configuration du tri grossier et du tri fin à l'aide d'une fonction de tri par pertinence textuelle.
1. Créez une politique de tri grossier. Dans la console OpenSearch, accédez à Sort Configuration > Policy Management, puis cliquez sur Create. Saisissez un Policy Name, définissez Scope sur Rough Sort, définissez Type sur Expression, puis cliquez sur Next.
Sélectionnez static_bm25 comme caractéristiques de scoring et définissez le poids sur 10. Un poids de 10 signifie que le score est multiplié par 10 lors du calcul. Vous pouvez également sélectionner un champ de recherche et lui attribuer un poids. Le champ doit être un champ d'attribut de type numérique, tel que INT, DOUBLE ou FLOAT. Le score correspondant à field value * weight est ajouté au score total de tri.
Par exemple, sélectionnez le champ sale_price dans Search Field et définissez son poids sur 0.08.
Une fois la configuration terminée, vous êtes redirigé vers la page de gestion des politiques.
2. Créez une politique de tri fin. Dans la console OpenSearch, accédez à Sort Configuration > Policy Management, puis cliquez sur Create. Saisissez un Policy Name, définissez Scope sur Fine Sort, définissez Type sur Expression, puis cliquez sur Next.
Lors de l'étape Sort Configuration, sélectionnez un champ dans la liste déroulante Field, saisissez l'expression de tri text_relevance(brand) dans l'éditeur, puis cliquez sur Completed. Une fois la configuration terminée, vous êtes redirigé vers la page Sort Configuration.
3. Consultez l'effet du tri. Sur la page Search Test, définissez le paramètre first_rank_name sur le nom de votre politique de tri grossier, par exemple test_1. Définissez le paramètre second_rank_name sur le nom de votre politique de tri fin, par exemple test_2. Activez l'option Show Sort Details pour afficher les détails des scores pour chaque document et fonction.
Le scoring des documents s'effectue en deux étapes : le tri grossier et le tri fin. Après la récupération et le filtrage des documents par la requête, ceux-ci entrent dans l'étape de tri grossier. L'expression de tri grossier sélectionne les documents affichant les scores les plus élevés. Ensuite, les N premiers résultats sont transmis à l'étape de tri fin pour un scoring détaillé basé sur l'expression de tri fin. Enfin, les résultats optimaux sont renvoyés. La logique de scoring est la suivante :
Si seule une politique de tri grossier est configurée, le score du document est égal à (10000 + le résultat de l'expression de tri grossier). Le score total est plafonné à 20 000.
Si seule une politique de tri fin est configurée, le score du document est égal à (10000 + le résultat de l'expression de tri fin). Le score total n'a aucune limite supérieure.
Si les politiques de tri grossier et de tri fin sont toutes deux configurées, le score final des documents entrant dans l'étape de tri fin est égal à (10000 + le résultat de l'expression de tri fin). Le score final des autres documents est égal à (10000 + le résultat de l'expression de tri grossier), et ce score est plafonné à 20 000.
Vous pouvez créer plusieurs règles de tri grossier et de tri fin, mais une requête ne peut utiliser qu'une seule règle de tri grossier et une seule règle de tri fin à la fois.
Le paramètre
first_rank_nameprend en charge uniquement un nom d'expression de tri.Le paramètre
second_rank_nameprend en charge uniquement un nom d'expression de tri.
Exemples de configuration SDK
Exemple Java SDK :
// Set the rough and fine sort expressions. This example uses "default".
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.
Exemple PHP SDK :
// Specify the rough sort expression.
$params->setFirstRankName('default');
// Specify the fine sort expression.
$params->setSecondRankName('default');
Remarque :
Si vous spécifiez des politiques de tri dans votre code, elles remplacent les politiques par défaut définies dans la console.
-
Pour afficher les détails du tri dans le code :
Méthode : Ajoutez le paramètre
format:fulljsonà la clause config.Dans la réponse,
sortExprValuescontient le score du document."sortExprValues": [ "10000.0399786383" ], "property": { }sortExprValuesest un tableau contenant les valeurs des champs de tri présents dans la clause de tri. Exemple :sort=-price;-RANKDans ce cas,
sortExprValuesvaut[price, document score].Si
sortn'est pas défini, la valeur correspond par défaut au score du document.