Numerische Suchindexe

Der Suchindex bietet nicht nur eine Möglichkeit, Text zu indexieren, sondern auch Zahlen. Sie wird hauptsächlich verwendet, um Abfragen der Volltextsuche um Bedingungen für numerische Felder zu ergänzen. Auf dieser Seite wird beschrieben, wie Sie Zahlen für Gleichheits- und Ungleichheitsabfragen sowie ein Array von Zahlen indexieren.

Zahlen tokenisieren

Mit der Funktion TOKENIZE_NUMBER können Sie einen numerischen Index erstellen. Weitere Informationen finden Sie unter TOKENIZE_NUMBER.

Indexnummern für Gleichheits- und Ungleichheitsabfragen

Spanner unterstützt die Indexierung von Zahlen für Gleichheit und Ungleichheit. Bei Gleichheitsabfragen wird eine Zahl verglichen. Bei Suchanfragen mit Bereich und Ungleichheit werden Zahlen innerhalb eines bestimmten Bereichs abgeglichen. Sie legen diesen Wert im Parameter TOKENIZE_NUMBER comparison_type fest:

  • Gleichberechtigung: comparison_type=>"equality"
  • Ungleichheit und Gleichheit: comparison_type=>"all"

In beiden Fällen wird die ursprüngliche Zahl (Ganzzahl oder Gleitkommazahl) tokenisiert. Dieses Verfahren ähnelt der Tokenisierung von Volltexten. Es werden eine Reihe von Tokens generiert, mit denen die Abfrage dann Dokumente finden kann, die der Zahlenbedingung entsprechen.

Bei der Gleichwertigkeitsindexierung wird nur ein Token generiert, das die Zahl darstellt. Dieser Modus wird empfohlen, wenn Abfragen nur Bedingungen in Form von field = @p in der WHERE-Klausel enthalten.

Die Indexierung von Ungleichheiten und Gleichheiten kann die Ausführung einer größeren Anzahl von Bedingungen in der WHERE-Klausel der Abfrage beschleunigen. Dazu gehören neben Gleichheitsbedingungen auch field < @p, field <= @p, field > @p, field >= @p, field BETWEEN @p1 and @p2 und field <> @p. Zur Implementierung dieser Art der Indexierung generiert Spanner Tokens im zugrunde liegenden Suchindex. Je nach Tuning-Parametern kann Spanner viele Tokens für jede indexierte Zahl generieren. Die Anzahl der Tokens hängt von den Parametern ab, die für TOKENIZE_NUMBER festgelegt sind, z. B. algorithm, min, max und granularity. Daher ist es wichtig, die Optimierungsparameter sorgfältig zu bewerten, um ein angemessenes Gleichgewicht zwischen Laufwerkspeicher und Suchzeit zu erreichen.

Array-Tokenisierung

Neben skalaren Werten unterstützt TOKENIZE_NUMBER die Tokenisierung eines Zahlenarrays.

Wenn TOKENIZE_NUMBER mit der Spalte ARRAY verwendet wird, müssen Sie comparison_type=>"equality" angeben. Bereichsanfragen mit einem Zahlenarray werden nicht unterstützt.

Betrachten Sie beispielsweise das folgende Schema:

CREATE TABLE Albums (
  AlbumId STRING(MAX) NOT NULL,
  Ratings ARRAY<INT64>,
  Ratings_Tokens TOKENLIST
    AS (TOKENIZE_NUMBER(Ratings, comparison_type=>"equality")) HIDDEN
) PRIMARY KEY(AlbumId);

CREATE SEARCH INDEX AlbumsIndex ON Albums(Ratings_Tokens);

Mit der folgenden Abfrage werden alle Alben mit einer Bewertung von 1 oder 2 gefunden:

SELECT AlbumId
FROM Albums
WHERE ARRAY_INCLUDES_ANY(Ratings, [1, 2])

Mit der folgenden Abfrage werden alle Alben gefunden, die mit 1 und 5 bewertet wurden:

SELECT AlbumId
FROM Albums
WHERE ARRAY_INCLUDES_ALL(Ratings, [1, 5])

Nächste Schritte