Rangfolge von Suchergebnissen festlegen

Auf dieser Seite wird beschrieben, wie Sie Suchergebnisse für Volltextsuchen in Spanner sortieren.

Spanner unterstützt die Berechnung eines Themenwerts, der als Baustein für die Erstellung komplexer Rankingfunktionen dient. Diese Bewertungen die Relevanz eines Ergebnisses für eine Abfrage basierend auf dem Suchbegriff berechnen und andere anpassbare Optionen auswählen.

Das folgende Beispiel zeigt eine nach Rang geordnete Suche:

SELECT AlbumId
FROM Albums
WHERE SEARCH(AlbumTitle_Tokens, @p)
ORDER BY SCORE(AlbumTitle_Tokens, @p) DESC

Suchbegriffe mit der SCORE-Funktion bewerten

Die SCORE berechnet für jeden Suchbegriff eine Punktzahl und kombiniert dann Punktzahlen. Die Bewertung pro Begriff basiert grob auf dem Begriffshäufigkeit – Inverse-Dokument Häufigkeit (TF/IDF). Das Ergebnis: eine Komponente der endgültigen Sortierung für einen Datensatz. Die Abfrage kombiniert sie mit andere Signale wie die Aktualität, die den Aktualitätsfaktor beeinflusst.

In der aktuellen Implementierung ist der IDF-Teil von TF/IDF nur verfügbar, wenn enhance_query=>true wird verwendet. Damit wird die relative Häufigkeit von Wörtern berechnet. auf dem gesamten von der Google Suche verwendeten Webkorpus und nicht Suchindex gibt. Wenn die rquery-Erweiterung nicht aktiviert ist, verwendet den Begriff Frequenzkomponente (TF) (d. h. der IDF-Begriff ist auf 1 gesetzt).

Normalerweise ist die Option enhance_query sowohl für SEARCH als auch für und SCORE.

Die Funktion SCORE gibt Werte zurück, die als Relevanzwerte dienen, die Spanner verwendet, um eine Sortierreihenfolge festzulegen. Es gibt keine eigenständigen Bedeutung. Je höher der Wert, desto besser entspricht er der Suchanfrage.

Mehrere Spalten bewerten

Spanner verwendet die Funktion SCORE, um jedes Feld zu bewerten individuell anpassen. Die Abfrage kombiniert diese einzelnen Punktzahlen dann. Eine gemeinsame Dabei werden die einzelnen Werte addiert und dann verbessert. entsprechend den vom Nutzer bereitgestellten Feldgewichtungen (die über die SQL-Abfrage bereitgestellt werden) Parameter).

Die folgende Abfrage kombiniert beispielsweise die Ausgabe von zwei SCORE-Funktionen:

SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, @p1) AND SEARCH(Studio_Tokens, @p2)
ORDER BY SCORE(Title_Tokens, @p1) * @titleweight + SCORE(Studio_Tokens, @p2) * @studioweight
LIMIT 25

Im folgenden Beispiel werden zwei Boost-Parameter hinzugefügt:

  • Aktualität (FreshnessBoost) erhöht den Score um (1 + @freshnessweight * GREATEST(0, 30 - DaysOld) / 30)
  • Beliebtheit(PopularityBoost) erhöht den Wert, indem er mit multipliziert wird Faktor (1 + IF(HasGrammy, @grammyweight, 0).

Zur besseren Lesbarkeit wird in der Abfrage der Operator WITH verwendet.

SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, @p1) AND SEARCH(Studio_Tokens, @p2)
ORDER BY WITH(
  TitleScore AS SCORE(Title_Tokens, @p1) * @titleweight,
  StudioScore AS SCORE(Studio_Tokens, @p2) * @studioweight,
  DaysOld AS (UNIX_MICROS(CURRENT_TIMESTAMP()) - ReleaseTimestamp) / 8.64e+10,
  FreshnessBoost AS (1 + @freshnessweight * GREATEST(0, 30 - DaysOld) / 30),
  PopularityBoost AS (1 + IF(HasGrammy, @grammyweight, 0)),
  (TitleScore + StudioScore) * FreshnessBoost * PopularityBoost)
LIMIT 25

Übereinstimmungen mit der Boost-Abfragereihenfolge

Sie können den Aktualitätsfaktor für Werte, die Sie enthalten die Suchbegriffe in derselben Reihenfolge, in der sie in der Suchanfrage vorkommen. Es gibt zwei Versionen dieses Boosts: teilweise Übereinstimmung und genaue Übereinstimmung. Eine teilweise Übereinstimmung Die Steigerung wird in folgenden Fällen angewendet:

  1. TOKENLIST enthält alle ursprünglichen Begriffe in der Abfrage.
  2. Die Tokens befinden sich nebeneinander und in derselben Reihenfolge wie sie angezeigt. in die Abfrage ein.

Für Konjunktionen, Negationen und Wortgruppen gelten bestimmte Sonderregeln:

  • Eine Suchanfrage mit einer Verneinung kann keinen Zuschlag für teilweise Übereinstimmungen erhalten.
  • Eine Abfrage mit einer Konjunktion erhält einen Boost, wenn Teil der Konjunktion an den entsprechenden Stellen erscheint.
  • Eine Suchanfrage mit einer Wortgruppe erhält einen Schub, wenn die Wortgruppe in der TOKENLIST und der Begriff links von der Wortgruppe in der Suchanfrage scheint links von der Wortgruppe in TOKENLIST und das Gleiche gilt für den Begriff rechts neben der Wortgruppe.

Spanner wendet einen Boost für die genaue Übereinstimmung an, wenn alle der vorherigen gelten. Das erste und letzte Token in der Abfrage sind das erste und letzte Token. Tokens im Dokument.

Beispieldokument: Brücke über Wasserprobleme

Abfrage Auffrischung angewendet
Bridge Troubled kein Boost
Brücke über anderen Gewässer kein Boost
Brücke (über OR unruhiges) Wasser kein Boost
Bridge Over Teilweise Steigerung
Bridge Over (Problem ODER Wasser) teilweiser Boost
Brücke über schlechtem Wasser genau passend
Bridge „Over Issued“ Wasser genau passend
Brücke („Über stürmisches“ ODER missingterm) Wasser genau passend

Abruftiefe einschränken

Suchindexe enthalten oft Millionen von Dokumenten. Bei Abfragen, bei denen die Prädikate eine geringe Selektivität haben, ist es nicht sinnvoll, alle Ergebnisse zu sortieren. Für die Bewertung von Abfragen gibt es normalerweise zwei Einschränkungen:

  1. Limit für Abruftiefe: die maximale Anzahl der zu bewertenden Zeilen.
  2. Größenlimit für Ergebnissatz: Die maximale Anzahl von Zeilen, die die Abfrage zurückgeben soll (in der Regel die Seitengröße).

Abfragen können die Abruftiefe mit SQL-Unterabfragen einschränken:

SELECT *
FROM (
  SELECT AlbumId
  FROM Albums
  WHERE SEARCH(Title_Tokens, @p1)
  ORDER BY ReleaseTimestamp DESC
  LIMIT @retrieval_limit
)
ORDER BY SCORE(Title_Tokens, @p1)
LIMIT @page_size

Das funktioniert besonders gut, wenn Spanner die wichtigsten das Ranking-Signal, um den Index zu sortieren.

Nächste Schritte