Dans Elasticsearch, la méthode de tri par défaut consiste à trier en fonction de l'algorithme de notation (c'est-à-dire la corrélation). Cependant, nous devons parfois trier les résultats de recherche en fonction des besoins commerciaux spécifiques, tels que le prix, les ventes, etc. Pour ce faire, vous pouvez utiliser la valeur de poids (boost) pour ajuster la priorité du tri, plus la valeur de poids est élevée, plus le résultat est élevé.
Supposons que nous ayons un indice de produit qui contient les champs «Nom» (nom) et «Price» (prix). Si vous souhaitez trier par ordre décroissant des prix, vous pouvez utiliser le code suivant:
Get / Products / _Search { "requête": { "match_all": {} }, "trier": [ { "prix": { "Ordre": "Desc" } } ]] }
Ce code retournera tous les éléments et triera les résultats en ordre décroissant des prix. Vous pouvez modifier le champ de tri en fonction des besoins réels.
Parfois, nous devons trier selon plusieurs conditions, qui peuvent être implémentées à l'aide de scripts de fonction. Supposons que nous voulons trier par la note et le volume des ventes du produit, où le poids de la notation est de 0,7 et le poids du volume des ventes est de 0,3. Voici le code pour y parvenir:
Tout d'abord, lors de la création d'un index, nous devons ajouter des champs de notation et de vente:
Mettre / produits { "Mappings": { "propriétés": { "nom": { "type": "texte" }, "notation": { "Type": "Float" }, "ventes": { "type": "entier" } } } }
Ensuite, utilisez un script de fonction pour définir la collation:
Get / Products / _Search { "requête": { "match_all": {} }, "trier": [ { "_scénario": { "type": "numéro", "scénario": { "Source": "(0.7 * doc ['notation']. Valeur) + (0.3 * doc ['Sales']. Valeur)" }, "Ordre": "Desc" } } ]] }
Ce code triera les résultats de recherche en fonction de la moyenne pondérée des cotes et des ventes. Vous pouvez ajuster la valeur de poids et la méthode de calcul en fonction des besoins spécifiques.
Elasticsearch fournit une variété de types de cartographie et de paramètres qui peuvent nous aider à optimiser le type de résultats de recherche. En particulier, les options suivantes sont très utiles pour le tri:
Par exemple, nous voulons trier par l'âge de l'utilisateur. Tout d'abord, lors de la création d'un index, nous devons définir la carte du champ:
Mettre / utilisateurs { "Mappings": { "propriétés": { "nom": { "type": "texte" }, "âge": { "type": "mot-clé", "index": "not_analyzed", "FieldData": vrai } } } }
Ensuite, triez par ordre de l'âge de l'âge en utilisant le code suivant:
Get / Users / _Search { "requête": { "match_all": {} }, "trier": [ { "âge": { "Ordre": "ASC" } } ]] }
Ce code sera trié en ascendance en fonction de l'âge de l'utilisateur.
En utilisant le tri de valeur de poids, en définissant des règles de tri complexes et en optimisant les types et paramètres de mappage de champ, nous pouvons considérablement améliorer l'efficacité et la précision du tri des résultats de recherche dans Elasticsearch. Selon les différents besoins de l'entreprise, vous pouvez ajuster de manière flexible ces méthodes d'optimisation pour obtenir une meilleure expérience de recherche.