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 <b>apple</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
undTOKENIZE_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:
- Definiert die Datenspalten
AlbumTitle
undRating
. Definiert
AlbumTitle_Tokens
undAlbumRating_Tokens
. DieseTOKENLIST
-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
- Weitere Informationen zu Suchindexen
- Weitere Informationen zu numerischen Indexen
- Weitere Informationen zur Indexpartitionierung