Tokenisierung

Auf dieser Seite wird beschrieben, wie Sie Tabellen die Tokenisierung hinzufügen. Die Tokenisierung ist erforderlich, um die Tokens zu erstellen, die im Suchindex verwendet werden.

Übersicht

Bei der Tokenisierung werden Werte in Tokens umgewandelt. Die Methode, mit der Sie Mit der Funktion zum Tokenisieren eines Dokuments werden die Typen und die Effizienz der Suchvorgänge bestimmt. die Nutzende damit ausführen können.

Spanner bietet Tokenizer für Text in natürlicher Sprache, Teilzeichenfolgen, wörtlicher Text, Zahlen und boolesche Werte. Im Datenbankschema wird der Tokenisierer verwendet, der der für die Spalte erforderlichen Suchanfrage entspricht. Tokenizer folgende Merkmale haben:

  • Jeder Tokenisierer ist eine SQL-Funktion, die eine Eingabe wie einen String oder eine Zahl und benannte Argumente für zusätzliche Optionen erhält.
  • Der Tokenizer gibt eine TOKENLIST aus.

Beispiel: Die Textzeichenfolge The quick brown fox jumps over the lazy dog wird in [the,quick,brown,fox,jumps,over,the,lazy,dog] tokenisiert. Der HTML-String The <b>apple</b> is <i>red</i> wird tokenisiert in [the,apple,is,red].

Tokens haben folgende Eigenschaften:

  • Tokens werden in Spalten mit dem Datentyp TOKENLIST gespeichert.
  • Jedes Token wird als Bytefolge mit optionalen zugehörigen Attributen gespeichert. In Volltextanwendungen ist ein Token beispielsweise in der Regel ein einzelnes Wort aus einem Textdokument.
  • Beim Tokenisieren von HTML-Werten generiert Spanner Attribute, die die Bedeutung eines Tokens im Dokument angeben. Spanner verwendet diese Attribute für die Bewertung, um wichtigere Begriffe (z. B. eine Überschrift) hervorzuheben.

Tokenizer

Spanner unterstützt die folgenden Tokenizer-Funktionen:

  • Der Volltext-Tokenisierer (TOKENIZE_FULLTEXT) generiert Wort-Tokens für Suchanfragen in natürlicher Sprache.

    Beispiel

    Beide der folgenden Funktionen

    TOKENIZE_FULLTEXT("Yellow apple")
    TOKENIZE_FULLTEXT("Yellow &lt;b>apple&lt;/b>", content_type=>"text/html")
    

    dieselben Tokens erzeugen: [yellow,apple].

  • Der Substring-Tokenisierer (TOKENIZE_SUBSTRING) generiert Tokens für jedes N-Gramm jedes Wortes. Damit werden Teilstrings gefunden. aus Wörtern in einem Text.

    Beispiel

    TOKENIZE_SUBSTRING("hello world", ngram_size_min=>4, ngram_size_max=>6)
    

    Erzeugt die folgenden Tokens: [ello,hell,hello,orld,worl,world].

  • Der N-Gramm-Tokenisierer (TOKENIZE_NGRAMS) generiert N-Gramme aus einer Eingabe, ohne sie in einzelne Wörter aufzuteilen. Sie wird verwendet, um Prädikate für reguläre Ausdrücke zu beschleunigen.

    Beispiel

    Die folgende Funktion:

    TOKENIZE_NGRAMS("Big Time", ngram_size_min=>4, ngram_size_max=>4)
    

    Erzeugt die folgenden Tokens: ["Big ","ig T","g Ti"," Tim", "Time"].

  • Tokenizer für genaue Übereinstimmung (TOKEN und TOKENIZE_BOOL) werden verwendet, um nach Zeilen zu suchen, die einen bestimmten Wert in einer ihrer Spalten enthalten. Beispielsweise kann in einer Anwendung, die einen Produktkatalog indexiert, nach Produkten einer bestimmten Marke und Farbe gesucht werden.

    Beispiele

    Die folgenden Funktionen:

    TOKEN("hello")
    TOKEN(["hello", "world"])
    

    Erstellen Sie jeweils die folgenden Tokens: [hello] und [hello,world].

    Die folgende Funktion:

    TOKENIZE_BOOL(true)
    

    Das folgende Token wird generiert: [y].

  • Mit Zahlen-Tokenisierern (TOKENIZE_NUMBER) werden mehrere Tokens generiert, die numerische Vergleichssuchen beschleunigen. Bei Gleichheitsbedingungen ist das Token die Zahl selbst. Bei Bereichsbedingungen (z. B. rating >= 3.5) ist die Anzahl der Tokens umfangreicher.

    Beispiele

    Die folgenden Funktionsanweisungen:

    TOKENIZE_NUMBER(42, comparison_type=>"equality")
    TOKENIZE_NUMBER(42, comparison_type=>"all", granularity=>10, min=>1, max=>100)
    

    Erstellen Sie jeweils die folgenden Tokens: "==42" und "==42". "[1,75]","[36, 45]","[36,55]","[36, 75]".

Tokenisierungsfunktionen werden in der Regel in einem Ausdruck für eine generierte Spalte verwendet. Diese Spalten sind als HIDDEN definiert, sodass sie nicht in SELECT *-Abfrageergebnissen enthalten sind.

Im folgenden Beispiel werden ein Volltexttokenizer und ein numerischer Tokenizer verwendet, eine Datenbank zu erstellen, in der die Namen und Bewertungen von Musikalben gespeichert sind. Die DDL-Anweisung bewirkt zwei Dinge:

  1. Definiert die Datenspalten AlbumTitle und Rating.
  2. Definiert AlbumTitle_Tokens und AlbumRating_Tokens. Diese TOKENLIST -Spalten tokenisieren die Werte in den Datenspalten, Spanner kann sie indexieren.

    CREATE TABLE Albums (
      AlbumId STRING(MAX) NOT NULL,
      AlbumTitle STRING(MAX),
      Rating FLOAT64,
      AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(AlbumTitle)) HIDDEN,
      Rating_Tokens TOKENLIST AS (TOKENIZE_NUMBER(Rating)) HIDDEN
    ) PRIMARY KEY(AlbumId);
    

Wenn die Basiswerte geändert werden, werden AlbumTitle_Tokens und Rating_Tokens automatisch aktualisiert.

Nur Text oder HTML-Inhalt tokenisieren

Die Texttokenisierung unterstützt Nur-Text- und HTML-Inhaltstypen. Verwenden Sie die Spanner-Funktion TOKENIZE_FULLTEXT, um Tokens zu erstellen. Verwenden Sie dann das CREATE SEARCH INDEX DDL-Anweisung zum Generieren des Suchindex.

In der folgenden CREATE TABLE-DDL-Anweisung wird beispielsweise die Funktion TOKENIZE_FULLTEXT verwendet, um Tokens aus AlbumTitles in der Tabelle Albums zu erstellen. Mit der DDL-Anweisung CREATE SEARCH INDEX wird ein Suchindex mit der neuen AlbumTitles_Tokens erstellt.

CREATE TABLE Albums (
  AlbumId STRING(MAX) NOT NULL,
  AlbumTitle STRING(MAX),
  AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);

CREATE SEARCH INDEX AlbumsIndex ON Albums(AlbumTitle_Tokens)

Für die Tokenisierung gelten die folgenden Regeln:

  • Die Tokenisierung umfasst nicht Wortstämme oder Korrektur von falsch geschriebene Wörter. In einem Satz wie „Eine Katze hat sich einen Katzengruppe“, das Token „Katze“ getrennt vom Token „cats“ indexiert wird. Im Vergleich zu anderen Suchmaschinen, die Tokens beim Schreiben normalisieren, Spanner bietet eine Option zum Erweitern der Suchanfrage auf verschiedene Wortformen enthalten. Weitere Informationen finden Sie unter Erweiterter Abfragemodus.
  • Stoppwörter wie „ein“ sind im Suchindex enthalten.
  • Bei der Volltextsuche wird immer nicht zwischen Groß- und Kleinschreibung unterschieden. Der Tokenisierungsprozess wandelt alle Tokens in Kleinbuchstaben um.

Der Tokenisierungsprozess verfolgt die Positionen für jedes Token im Original. Text. Diese Positionen werden später zum Abgleichen von Wortgruppen verwendet. Die Positionen werden gespeichert im Suchindex neben Docids enthalten.

Google arbeitet kontinuierlich an der Verbesserung der Tokenisierungsalgorithmen. In einigen Fällen kann dies führen dazu, dass ein String in Zukunft anders tokenisiert wird als das jetzt in Token umgewandelt. Wir gehen davon aus, dass solche Fälle extrem selten sein werden. Ein Beispiel hierfür ist eine Verbesserung bei der Segmentierung von Chinesisch, Japanisch und Koreanisch (CJK).

Das Argument content_type gibt an, ob für das Inhaltsformat Nur-Text verwendet wird Text oder HTML. Verwenden Sie die folgenden Einstellungen, um den content_type festzulegen:

  • Legen Sie für die Texttokenisierung das Argument content_type auf „text/plain“ fest. Das ist die Standardeinstellung.
  • Legen Sie für die HTML-Tokenisierung das Argument content_type auf "text/html fest. Ohne dieses Argument werden HTML-Tags als Satzzeichen behandelt. Im HTML-Modus verwendet Spanner Heuristiken, um zu ermitteln, wie gut sichtbar der Text auf der Seite ist. Zum Beispiel, ob es sich um eine Überschrift handelt oder ob es sich um eine Schriftgröße handelt. Folgende Attribute werden für HTML unterstützt: small, medium, large, title und „link“. Wie bei der Position wird das Attribut zusammen mit dem Token im Suchindex. Bei der Tokenisierung werden keine Tokens für HTML-Tags erstellt.

Tokenattribute haben keinen Einfluss auf die Zuordnung oder die Ergebnisse der SEARCH oder SEARCH_SUBSTRING. Sie werden nur für das Ranking verwendet.

Das folgende Beispiel zeigt, wie Text tokenisiert wird:

CREATE TABLE T (
  ...
  Text STRING(MAX),
  Html STRING(MAX),
  Text_Tokens TOKENLIST
    AS (TOKENIZE_FULLTEXT(Text, content_type=>"text/plain")) HIDDEN,
  Html_Tokens TOKENLIST
    AS (TOKENIZE_FULLTEXT(Html, content_type=>"text/html")) HIDDEN
) PRIMARY KEY(...);

Verfeinerung der Spracherkennung mit dem Argument language_tag

Die Tokenisierung erkennt die Eingabesprache standardmäßig automatisch. Wenn der Parameter Eingabesprache bekannt ist, kann das Argument language_tag verwendet werden, um dieses Verhalten zu optimieren:

AlbumTitle_Tokens TOKENLIST
  AS (TOKENIZE_FULLTEXT(AlbumTitle, language_tag=>"en-us")) HIDDEN

Bei den meisten Anwendungen ist das Argument language_tag nicht angegeben und sie verlassen sich stattdessen zur automatischen Spracherkennung. Für die Segmentierung asiatischer Sprachen wie Chinesisch, Koreanisch und Japanisch muss die Tokenisierungssprache nicht festgelegt werden.

In den folgenden Beispielen wird gezeigt, wie sich language_tag auf die Tokenisierung auswirkt:

Tokenisierungsfunktion Erstellte Tokens
TOKENIZE_FULLTEXT("A tout pourquoi il y a un parce que") [a, tout, pourquoi, il, ya, un, parce, que]
TOKENIZE_FULLTEXT("A tout pourquoi il y a un parce que", \ language_tag=>"fr") [a, tout, pourquoi, il, y, a, un, parce, que]
TOKENIZE_FULLTEXT("旅 行") Zwei Tokens: [旅, 行]
TOKENIZE_FULLTEXT("旅 行", language_tag=>"zh") Ein Token: [旅苯]

Nächste Schritte