Neben der vollständigen Token-Übereinstimmung unterstützen Spanner Suchindizes auch Teilstring-Suchen. Auf dieser Seite wird beschrieben, wie Sie eine Teilstring Suche als Teil einer Volltextsuche in Spanner ausführen.
Teilstring-Suchen haben die folgenden Merkmale:
- Die Groß-/Kleinschreibung wird nicht berücksichtigt, die meisten Satzzeichen werden verworfen und Leerzeichen werden normalisiert.
- Keine Segmentierung für Chinesisch, Japanisch und Koreanisch (CJK), da teilweise CJK-Abfragen oft 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. Es stimmt nicht mit"happy day"überein.
Beispiele
| Gespeicherter Text | Teilstring-Abfrage | Ü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 bridge | Ja |
| Bridge over Troubled Water | Bridge bridge bridge | 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 eine Teilstring-Suche die TOKENIZE_SUBSTRING
Funktion in der TOKENLIST Spaltendefinition, wie im folgenden DDL
Beispiel gezeigt:
GoogleSQL
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
AlbumTitle STRING(MAX),
AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_SUBSTRING(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsTitleIndex ON Albums(AlbumTitle_Tokens);
PostgreSQL
In diesem Beispiel wird
spanner.tokenize_substring verwendet.
CREATE TABLE albums (
albumid character varying NOT NULL,
albumtitle character varying,
albumtitle_tokens spanner.tokenlist
GENERATED ALWAYS AS (spanner.tokenize_substring(albumtitle)) VIRTUAL HIDDEN,
PRIMARY KEY(albumid));
CREATE SEARCH INDEX albumstitleindex ON albums(albumtitle_tokens);
Verwenden Sie in der SQL-Abfrage die SEARCH_SUBSTRING Funktion in der WHERE Klausel. Die folgende Abfrage stimmt beispielsweise mit einem Album mit dem Titel „happy“ aus der Tabelle überein, die im vorherigen Beispiel erstellt wurde:
GoogleSQL
SELECT AlbumId
FROM Albums
WHERE SEARCH_SUBSTRING(AlbumTitle_Tokens, 'happ');
PostgreSQL
In diesem Beispiel wird
spanner.search_substring verwendet.
SELECT albumid
FROM albums
WHERE spanner.search_substring(albumtitle_tokens, 'happ');
TOKENIZE_SUBSTRING generiert n-Gramme
für jedes Token und speichert diese n-Gramme im Suchindex. Die Mindest- und Höchstlänge der zu generierenden n-Gramme werden über optionale Argumente konfiguriert.
Suchindizes für Teilstrings können 10- bis 30-mal mehr Speicherplatz als Volltextindizes für dieselben Daten verwenden, da bei der Tokenisierung viel mehr Tokens entstehen. Das gilt insbesondere, wenn die Differenz zwischen ngram_size_min und ngram_size_max wächst. Teilstring-Abfragen benötigen auch mehr Ressourcen für die Ausführung.
Wie bei TOKENIZE_FULLTEXT,
können Sie TOKENIZE_SUBSTRING so konfigurieren, dass bestimmte Inhaltstypen verwendet werden.
Relative Teilstring-Suche aktivieren
Neben der einfachen Teilstring-Suche,
SEARCH_SUBSTRING
unterstützt auch den relativen Suchmodus. Eine relative Suche verfeinert die Ergebnisse der Teilstring-Suche.
Wenn Sie den relativen Suchmodus aktivieren möchten, legen Sie den relative_search_types Parameter von
TOKENIZE_SUBSTRING
auf ein nicht leeres Array mit Elementen der unterstützten relativen Suchtypen fest.
Wenn die relative Suche bei der Tokenisierung aktiviert ist, kann SEARCH_SUBSTRING Abfragen mit den folgenden relativen Suchtypen ausführen:
phrase: stimmt mit zusammenhängenden Teilstrings übereinBeispiele
Gespeicherter Text Teilstring-Abfrage Übereinstimmung Bridge over Troubled Water bridge over Ja Bridge over Troubled Water Bridge bridge bridge Nein Bridge over Troubled Water brid over 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 RIDGE OVE Ja Bridge over Troubled Water bridge water Nein value_prefix: stimmt mit zusammenhängenden Teilstrings überein und die Übereinstimmung muss am Anfang des Werts beginnen. Dies ist konzeptionell ähnlich wie die FunktionSTARTS_WITHfür Strings, bei denen die Groß-/Kleinschreibung und Leerzeichen normalisiert wurden.Beispiele
Gespeicherter Text Teilstring-Abfrage Übereinstimmung Bridge over Troubled Water bridge over Ja Bridge over Troubled Water bridge , over Ja Bridge over Troubled Water ridge over Nein Bridge over Troubled Water troubled water Nein value_suffix: stimmt mit zusammenhängenden Teilstrings überein und die Übereinstimmung muss am Ende des Werts erfolgen. Dies ist konzeptionell ähnlich wie die FunktionENDS_WITHfür Strings, bei denen die Groß-/Kleinschreibung und Leerzeichen normalisiert wurden.Beispiele
Gespeicherter Text Teilstring-Abfrage Übereinstimmung Bridge over Troubled Water troubled water Ja Bridge over Troubled Water troubled ; water Ja Bridge over Troubled Water roubled water Ja Bridge over Troubled Water troubled wate Nein Bridge over Troubled Water trouble water Nein Bridge over Troubled Water bridge over Nein word_prefix:wievalue_prefix, aber der String muss an einer Begriffsgrenze (und nicht an einer Wertgrenze) übereinstimmen.Beispiele
Gespeicherter Text Teilstring-Abfrage Übereinstimmung Bridge over Troubled Water over trouble Ja Bridge over Troubled Water Over , trouble Ja Bridge over Troubled Water troub water Nein Bridge over Troubled Water over water Nein Bridge over Troubled Water ove troubled Nein Bridge over Troubled Water ver troubled Ja word_suffix: wievalue_suffix, aber der String muss am Ende einer Begriffsgrenze übereinstimmen.Beispiele
Gespeicherter Text Teilstring-Abfrage Übereinstimmung Bridge over Troubled Water ver troubled Ja Bridge over Troubled Water over trouble Nein Bridge over Troubled Water over water Nein Bridge over Troubled Water ove troubled Nein
Nächste Schritte
- Weitere Informationen zu Volltextsuchanfragen
- Informationen zum Ranking von Suchergebnissen
- Informationen zum Paginieren von Suchergebnissen
- Volltext- und Nicht-Text-Suchanfragen kombinieren
- Mehrere Spalten durchsuchen