E-Commerce Technologien 5 Min. Lesezeit

Ein Leitfaden zur Maximierung der Relevanz von Suchergebnissen und zur Entwicklung benutzerdefinierter Scoring-Strategien in E-Commerce-Anwendungen mit Elasticsearch

PROFSCODE Ekibi 24 Jul 2026
Paylaş:
E-Commerce-Suchmaschinenoptimierung: Relevanzsteigerung mit Elasticsearch und benutzerdefinierten Scoring-Techniken

Für E-Commerce-Plattformen ist eine leistungsstarke Suchmaschine einer der Grundpfeiler des Benutzererlebnisses und des Verkaufserfolgs. Wenn Ihr Produktkatalog jedoch wächst und die Benutzererwartungen steigen, reichen die standardmäßigen Suchalgorithmen oft nicht aus. In diesem Artikel erfahren wir, wie Sie die Relevanz Ihrer E-Commerce-Suchergebnisse mit der weltweit führenden Open-Source-Suchmaschine Elasticsearch feinabstimmen und wie Sie Ihren Benutzern mit benutzerdefinierten Scoring-Techniken genauere und zufriedenstellendere Ergebnisse liefern können.

Grundlegende Relevanz und der BM25-Algorithmus in Elasticsearch

Elasticsearch ordnet Suchergebnisse standardmäßig mit dem BM25 (Okapi BM25)-Algorithmus. Dieser Algorithmus berechnet einen Score (_score) unter Berücksichtigung von Faktoren wie der Häufigkeit eines Begriffs in einem Dokument (TF - Term Frequency) und seiner Seltenheit im gesamten Index (IDF - Inverse Document Frequency). Im E-Commerce kann jedoch die textliche Übereinstimmung allein nicht ausreichen. Bei einer Suche nach "Telefon" möchten Sie beispielsweise möglicherweise die meistverkauften oder neuesten Telefone priorisieren.

Felder verstärken (Boosting Fields)

Wir können Boosting verwenden, um anzuzeigen, dass bestimmte Felder (z. B. product_name oder brand) wichtiger sind als allgemeinere Felder wie product_description. Dies ist eine einfache, aber effektive Methode zur Anpassung der Relevanz.

GET /products/_search
{
  "query": {
    "multi_match": {
      "query": "samsung phone",
      "fields": [
        "product_name^3", 
        "brand^2", 
        "product_description"
      ]
    }
  }
}

Im obigen Beispiel wird das Feld product_name um den Faktor 3 und das Feld brand um den Faktor 2 verstärkt, wodurch ihr Standard-Score-Beitrag erhöht wird.

Benutzerdefiniertes Scoring: Die function_score-Abfrage

Für komplexere Relevanzlogik kommt die function_score-Abfrage ins Spiel. Diese Abfrage ermöglicht es Ihnen, den Dokumenten-Score zu ändern, indem Sie für jedes Dokument eine benutzerdefinierte Funktion anwenden. Einige gängige Funktionen, die Sie in function_score verwenden können, sind:

  • boost_factor: Fügt dem aktuellen Score einen konstanten Multiplikator hinzu.
  • field_value_factor: Bewertet basierend auf dem Wert eines numerischen Feldes.
  • random_score: Fügt einen zufälligen Score hinzu (für A/B-Tests oder Entdeckungszwecke).
  • decay_functions: Verringert den Score basierend auf der Nähe eines numerischen Feldes zu einem bestimmten Wert oder der Aktualität eines Datumsfeldes (z. B. gauss, exp, linear).
  • script_score: Ermöglicht das Schreiben einer vollständig benutzerdefinierten Scoring-Logik mit der Painless-Skriptsprache. Dies ist die flexibelste Option.

Beispiel 1: Scoring nach Popularität und Lagerbestand (field_value_factor)

Im E-Commerce ist die Priorisierung beliebter Produkte oder Produkte mit ausreichend Lagerbestand eine häufige Anforderung. Mit field_value_factor können wir dies leicht tun:

GET /products/_search
{
  "query": {
    "function_score": {
      "query": {
        "multi_match": {
          "query": "smart watch",
          "fields": ["product_name", "brand", "features"]
        }
      },
      "functions": [
        {
          "field_value_factor": {
            "field": "sales_count",
            "modifier": "log1p", 
            "factor": 1.2
          }
        },
        {
          "field_value_factor": {
            "field": "stock_quantity",
            "modifier": "sqrt",
            "factor": 0.5
          }
        }
      ],
      "score_mode": "multiply", 
      "boost_mode": "multiply"
    }
  }
}

Diese Abfrage berücksichtigt sowohl die Verkaufszahlen (logarithmische Erhöhung mit log1p) als auch die Lagerbestandsmenge (Quadratwurzel mit sqrt) im Score für "Smart Watch"-Suchen. score_mode und boost_mode bestimmen, wie die Scores aus mehreren Funktionen oder der Hauptabfrage kombiniert werden.

Beispiel 2: Priorisierung neuer Produkte (decay_functions)

Um neu hinzugefügte Produkte sichtbarer zu machen, können wir decay_functions verwenden. Das folgende Beispiel gibt neueren Produkten basierend auf dem Feld added_date einen höheren Score:

GET /products/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "product_name": "laptop"
        }
      },
      "functions": [
        {
          "gauss": {
            "added_date": {
              "origin": "now",
              "scale": "30d",
              "offset": "7d",
              "decay": 0.5
            }
          }
        }
      ],
      "boost_mode": "multiply"
    }
  }
}
  • origin: "now": Der Mittelpunkt ist die aktuelle Zeit.
  • scale: "30d": Der Score-Abfall beginnt innerhalb von 30 Tagen.
  • offset: "7d": Für die ersten 7 Tage ist der Score voll; der Abfall beginnt nicht.
  • decay: 0.5: Reduziert den Score auf die Hälfte des ursprünglichen Scores, wenn er um den scale-Wert entfernt ist.

Beispiel 3: Skript-Score für komplexe Logik (Painless)

Wenn Sie mehrere Felder oder eine benutzerdefinierte Geschäftslogik kombinieren möchten, kommt script_score ins Spiel. Sie möchten beispielsweise Produkte mit einem "reduzierten" Tag, beliebte Produkte in einer bestimmten Kategorie und Produkte in der Nähe eines bestimmten Preises gleichzeitig priorisieren.

GET /products/_search
{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must": { "match": { "product_name": "headphones" } },
          "should": [
            { "term": { "category.keyword": "gaming_accessories" } },
            { "term": { "tags.keyword": "discounted" } }
          ]
        }
      },
      "functions": [
        {
          "script_score": {
            "script": {
              "source": """
                double custom_score = _score;
                // Priorisiere reduzierte Produkte stärker
                if (doc['tags.keyword'].contains('discounted')) {
                  custom_score *= 1.5;
                }
                // Produkte in der Kategorie Gaming-Zubehör mit einem zusätzlichen Bonus verstärken
                if (doc['category.keyword'].contains('gaming_accessories')) {
                  custom_score *= 1.3;
                }
                // Leichter Bonus für Produkte mit hoher Lagerbestandsmenge
                if (doc['stock_quantity'].size() > 0 && doc['stock_quantity'].value > 100) {
                  custom_score *= 1.1;
                }
                return custom_score;
              """
            }
          }
        }
      ],
      "boost_mode": "multiply"
    }
  }
}

Dieses Skript erhöht den Score dynamisch basierend darauf, ob das Produkt "reduziert" ist, zur Kategorie "Gaming-Zubehör" gehört und wie hoch der Lagerbestand ist, zusätzlich zum Basis-BM25-Score. Painless-Skripte sind sehr leistungsstark und ermöglichen es Ihnen, nahezu jede Art von Geschäftslogik zu implementieren.

Best Practices und Überlegungen

  • Iterativer Ansatz: Relevanzoptimierung ist ein fortlaufender Prozess. Wenden Sie Änderungen in kleinen Schritten an, testen Sie sie und bewerten Sie die Ergebnisse anhand von Benutzerfeedback oder Suchanalysen.
  • Leistung: Achten Sie insbesondere bei der Verwendung von script_score auf die Komplexität der Skripte. Sehr komplexe Skripte können die Suchleistung negativ beeinflussen. Bevorzugen Sie nach Möglichkeit einfachere function_score-Typen.
  • Benutzerverhalten überwachen: Verfolgen Sie, welche Suchen zu welchen Produkten führen, welche Produkte Benutzer anklicken und die Konversionsraten, um Ihre Optimierungsstrategien weiter zu verfeinern.
  • Caching verwenden: Das Zwischenspeichern von Ergebnissen für häufig durchgeführte Suchen kann die Leistung verbessern.

Fazit

Für E-Commerce-Websites ist es entscheidend, dass Benutzer das richtige Produkt schnell finden. Dank der leistungsstarken Scoring-Mechanismen von Elasticsearch und der function_score-Abfrage können Sie über reine Textübereinstimmungen hinausgehen, um dynamische und intelligente Suchergebnisse zu liefern, die auf Ihre Geschäftslogik zugeschnitten sind. Durch die Implementierung dieser Techniken werden Sie das Sucherlebnis Ihrer Benutzer bereichern und Ihre Verkäufe steigern.

Zurück zum Blog

Kommentare (0)

Noch keine Kommentare. Seien Sie der Erste!

Kommentar absenden