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:
TOKENLIST
enthält alle ursprünglichen Begriffe in der Abfrage.- 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 inTOKENLIST
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:
- Limit für Abruftiefe: die maximale Anzahl der zu bewertenden Zeilen.
- 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
- Weitere Informationen zu Volltextsuchanfragen
- Weitere Informationen zum Durchführen einer Teilstring-Suche
- Suchergebnisse paginieren
- Volltext- und Nicht-Text-Abfragen kombinieren
- Weitere Informationen zur Suche in mehreren Spalten