Aktueller Standort: Startseite> Neueste Artikel> Wie optimieren Sie den Sortieralgorithmus der Suchergebnisse von PHP Elasticsearch? Effizienz und Genauigkeit verbessern

Wie optimieren Sie den Sortieralgorithmus der Suchergebnisse von PHP Elasticsearch? Effizienz und Genauigkeit verbessern

M66 2025-06-20

Sortieren Sie mit Gewichtswerten

In Elasticsearch besteht die Standardsortierungsmethode darin, basierend auf dem Bewertungsalgorithmus (d. H. Korrelation) zu sortieren. Manchmal müssen wir jedoch die Suchergebnisse basierend auf bestimmten Geschäftsanforderungen wie Preis, Umsatz usw. sortieren.

Angenommen, wir haben einen Produktindex, der die Felder "Name" (Name) und "Price" (Preis) enthält. Wenn Sie in absteigender Preisreihenfolge sortieren möchten, können Sie den folgenden Code verwenden:

GET /PRODUKTE /_SEARCH
{
  "Abfrage": {
    "match_all": {}
  },
  "sortieren": [
    {
      "Preis": {
        "Order": "Desc"
      }
    }
  ]
}

Dieser Code gibt alle Elemente zurück und sortiert die Ergebnisse in absteigender Preisreihenfolge. Sie können das Sortierfeld entsprechend den tatsächlichen Bedürfnissen ändern.

Definieren Sie komplexe Sortierregeln

Manchmal müssen wir nach mehreren Bedingungen sortieren, die mit Funktionskripten implementiert werden können. Angenommen, wir möchten das Rating und das Verkaufsvolumen des Produkts sortieren, wobei das Gewicht der Bewertung 0,7 und das Gewicht des Verkaufsvolumens 0,3 beträgt. Hier ist der Code, um dies zu erreichen:

Zunächst müssen wir beim Erstellen eines Index Bewertungs- und Umsatzfelder hinzufügen:

Put /Produkte
{
  "Mappings": {
    "Eigenschaften": {
      "Name": {
        "Typ": "Text"
      },
      "Bewertung": {
        "Typ": "Float"
      },
      "Verkäufe": {
        "Typ": "Integer"
      }
    }
  }
}

Verwenden Sie als Nächstes ein Funktionskript, um die Zusammenfassung zu definieren:

GET /PRODUKTE /_SEARCH
{
  "Abfrage": {
    "match_all": {}
  },
  "sortieren": [
    {
      "_Script": {{
        "Typ": "Nummer",
        "Skript": {
          "Quelle": "(0,7 * doc ['Rating']. Wert) + (0,3 * doc ['Umsatz']. Wert)"
        },
        "Order": "Desc"
      }
    }
  ]
}

Dieser Code sortiert die Suchergebnisse basierend auf dem gewichteten Durchschnitt von Bewertungen und Umsätzen. Sie können den Gewichtswert und die Berechnungsmethode entsprechend den spezifischen Anforderungen einstellen.

Optimieren Sie die Feldzuordnungstypen und -einstellungen

Elasticsearch bietet eine Vielzahl von Mapping -Typen und -einstellungen, mit denen wir die Art der Suchergebnisse optimieren können. Insbesondere sind die folgenden Optionen sehr nützlich bei der Sortierung:

  • "Index": "Not_Analyzed" : Wenn Sie vermeiden müssen, dass das Feld teilgenommen wird, können Sie das Feld auf den Wort-Partikel-Modus einstellen, um die Genauigkeit der Sortierung sicherzustellen.
  • "FieldData": Richtig : Für Felder, die häufig sortiert werden müssen, kann das Ermöglichen von "FieldData" Feldwerte in Speicher laden und damit die Sortierleistung verbessern.

Zum Beispiel möchten wir nach dem Alter des Benutzers sortieren. Zunächst müssen wir beim Erstellen eines Index die Feldkarte festlegen:

Put /Benutzer
{
  "Mappings": {
    "Eigenschaften": {
      "Name": {
        "Typ": "Text"
      },
      "Alter": {
        "Typ": "Keyword",
        "Index": "Not_analyzed",
        "FieldData": Richtig
      }
    }
  }
}

Sortieren Sie als Nächstes sortieren Sie mit dem folgenden Code aufsteigender Reihenfolge:

Get /Benutzer /_SEARCH
{
  "Abfrage": {
    "match_all": {}
  },
  "sortieren": [
    {
      "Alter": {
        "Reihenfolge": "ASC"
      }
    }
  ]
}

Dieser Code wird nach dem Alter des Benutzers sortiert.

Zusammenfassen

Durch die Verwendung der Sortierung des Gewichtswerts, der Definition komplexer Sortierregeln und der Optimierung von Feldzuordnungen und Einstellungen können wir die Effizienz und Genauigkeit der Sortierung von Suchergebnissen in Elasticsearch erheblich verbessern. Abhängig von unterschiedlichen Geschäftsanforderungen können Sie diese Optimierungsmethoden flexibel anpassen, um ein besseres Sucherlebnis zu erzielen.