Teilstring-Suche durchführen

Neben der vollständigen Tokenübereinstimmung unterstützen Spanner-Suchindexe auch Teilstring-Suchanfragen. Auf dieser Seite wird beschrieben, wie Sie eine Suchanfrage nach einem Teilstring im Rahmen einer Volltextsuche in Spanner ausführen.

Suchanfragen nach Unterstrings haben folgende Eigenschaften:

  • Groß- und Kleinschreibung wird nicht berücksichtigt, die meisten Satzzeichen werden ignoriert und Leerzeichen werden normalisiert.
  • Keine Segmentierung für Chinesisch, Japanisch und Koreanisch (CJK), da teilweise CJK-Suchanfragen häufig falsch segmentiert werden.
  • Bei mehreren Suchbegriffen muss das Ergebnis einen Teilstring aus jedem Begriff enthalten. Beispielsweise stimmt 'happ momen' mit "happy moment" überein, da beide Teilstrings im Text gefunden werden. Sie stimmt nicht mit "happy day" überein.

Beispiele

Gespeicherter Text Teilzeichenfolgenabfrage Übereinstimmung
Bridge over Troubled Water ridg roub Ja
Bridge over Troubled Water ridg , roub Ja
Bridge over Troubled Water over brid Ja
Bridge over Troubled Water ate-Brücke Ja
Bridge over Troubled Water Brücke Brücke Brücke Ja
Bridge over Troubled Water bri trou ter Ja
Bridge over Troubled Water bri dge Ja
Bridge over Troubled Water troubledwater Nein
Bridge over Troubled Water trubled Nein

Verwenden Sie für die Suche nach einem Teilstring die Funktion TOKENIZE_SUBSTRING in der Spaltendefinition TOKENLIST, wie im folgenden DDL-Beispiel gezeigt:

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

Verwenden Sie in der SQL-Abfrage die Funktion SEARCH_SUBSTRING in der WHERE-Klausel. Die folgende Abfrage entspricht beispielsweise einem Album mit dem Titel „happy“ aus der im vorherigen Beispiel erstellten Tabelle:

SELECT Album
FROM Albums
WHERE SEARCH_SUBSTRING(AlbumTitle_Tokens, 'happ');

TOKENIZE_SUBSTRING generiert für jedes Token N-Gramme und speichert diese N-Gramme im Suchindex. Die minimale und maximale Länge der zu generierenden N-Grammen wird über optionale Argumente konfiguriert.

Indexe für die Suche nach Substrings können 10- bis 30-mal mehr Speicherplatz als Volltextindexe für dieselben Daten belegen, da durch die Tokenisierung viel mehr Tokens erzeugt werden. Dies gilt insbesondere, wenn die Differenz zwischen ngram_size_min und ngram_size_max zunimmt. Außerdem werden für die Ausführung von Substring-Abfragen mehr Ressourcen benötigt.

Wie bei TOKENIZE_FULLTEXT können Sie TOKENIZE_SUBSTRING für die Verwendung bestimmter Inhaltstypen konfigurieren.

Neben der grundlegenden Suche nach Teilstrings unterstützt SEARCH_SUBSTRING den relativen Suchmodus. Mit einer relativen Suche können Sie die Ergebnisse einer Teilstringsuche verfeinern.

Wenn Sie den relativen Suchmodus aktivieren möchten, setzen Sie den Parameter relative_search_types von TOKENIZE_SUBSTRING auf ein nicht leeres Array mit Elementen der unterstützten relativen Suchtypen.

Wenn die relative Suche bei der Tokenisierung aktiviert ist, kann SEARCH_SUBSTRING Abfragen mit den folgenden relativen Suchtypen ausführen:

  • phrase: Übereinstimmung mit zusammenhängenden Teilstrings

    Beispiele

    Gespeicherter Text Teilzeichenfolgenabfrage. Übereinstimmung
    Bridge over Troubled Water Brücke über Ja
    Bridge over Troubled Water Brücke Brücke Brücke Nein
    Bridge over Troubled Water Überbrückung Nein
    Bridge over Troubled Water ridge over trouble Ja
    Bridge over Troubled Water bridge ove troubled Nein
    Bridge over Troubled Water idge ove Ja
    Bridge over Troubled Water idge , ove Ja
    Bridge over Troubled Water RIEGEL OVE Ja
    Bridge over Troubled Water Brückenwasser Nein
  • value_prefix: Damit werden zusammenhängende Teilstrings abgeglichen. Die Übereinstimmung muss am Anfang des Werts beginnen. Dies ist konzeptionell ähnlich wie die Funktion STARTS_WITH für Strings, die nach Groß- und Kleinschreibung und Leerzeichen normalisiert wurden.

    Beispiele

    Gespeicherter Text Teilzeichenfolgenabfrage Übereinstimmung
    Bridge over Troubled Water Brücke über Ja
    Bridge over Troubled Water Brücke , über Ja
    Bridge over Troubled Water Kamm über Nein
    Bridge over Troubled Water stürmische Gewässer Nein
  • value_suffix: Damit werden zusammenhängende Teilstrings abgeglichen. Die Übereinstimmung muss am Ende des Werts erfolgen. Dies ist konzeptionell ähnlich wie die Funktion ENDS_WITH für Strings, die nach Groß- und Kleinschreibung und Leerzeichen normalisiert wurden.

    Beispiele

    Gespeicherter Text Teilzeichenfolgenabfrage. Übereinstimmung
    Bridge over Troubled Water stürmische Gewässer Ja
    Bridge over Troubled Water trübes ; wasser Ja
    Bridge over Troubled Water trübes Wasser Ja
    Bridge over Troubled Water verschmutztes Wasser Nein
    Bridge over Troubled Water Unruhe Nein
    Bridge over Troubled Water Brücke über Nein
  • word_prefix: ähnelt value_prefix, aber der String muss an einer Begriffsgrenze (nicht an einer Wertegrenze) übereinstimmen.

    Beispiele

    Gespeicherter Text Teilzeichenfolgenabfrage Übereinstimmung
    Bridge over Troubled Water über Probleme Ja
    Bridge over Troubled Water Viele Grüße Ja
    Bridge over Troubled Water trübes Wasser Nein
    Bridge over Troubled Water über Wasser Nein
    Bridge over Troubled Water ove troubled Nein
    Bridge over Troubled Water ver troubled Ja
  • word_suffix: Ähnlich wie value_suffix, aber der String muss am Ende einer Wortgrenze übereinstimmen.

    Beispiele

    Gespeicherter Text Teilzeichenfolgenabfrage Übereinstimmung
    Bridge over Troubled Water ver troubled Ja
    Bridge over Troubled Water über Probleme Nein
    Bridge over Troubled Water über Wasser Nein
    Bridge over Troubled Water ove troubled Nein

Nächste Schritte