Position actuelle: Accueil> Derniers articles> Comment optimiser l'algorithme de tri des résultats de recherche PHP Elasticsearch? Améliorer l'efficacité et la précision

Comment optimiser l'algorithme de tri des résultats de recherche PHP Elasticsearch? Améliorer l'efficacité et la précision

M66 2025-06-20

Trier avec les valeurs de poids

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.

Définir les règles de tri complexes

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.

Optimiser les types et paramètres de mappage de champs

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:

  • "Index": "Not_analyzed" : Si vous avez besoin d'éviter que le champ participe, vous pouvez définir le champ sur le mode mot-parti pour assurer la précision du tri.
  • "FieldData": True : pour les champs qui doivent souvent être triés, permettant `fielddata` puissait charger les valeurs de champ en mémoire, améliorant ainsi les performances de 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.

Résumer

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.