Suchindexe können indexieren mehreren tokenisierten Spalten, wodurch Abfragen in diesen Spalten effizienter werden. Auf dieser Seite wird beschrieben, wie Sie eine Suche in mehreren Spalten durchführen, eine Art Volltextsuche.
Mehrspaltige Suche durchführen
Die Struktur des Suchindex sorgt dafür, dass für Abfragen kein verteilter Join erforderlich ist, was eine vorhersehbare Leistung der Abfragen ermöglicht. Der Distributed Join wird aufgrund der Colocation aller Tokens, die einer Basistabellenzeile in demselben Split entsprechen.
Betrachten Sie beispielsweise das folgende Schema:
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
Title STRING(MAX),
Studio STRING(MAX),
Title_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(Title)) HIDDEN,
Studio_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(Studio)) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsIndex ON Albums(Title_Tokens, Studio_Tokens);
In einer Abfrage können jetzt beide Felder durchsucht werden:
SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, "fifth symphony")
AND SEARCH(Studio_Tokens, "Blue Note Studio")
Spanner unterstützt mehrspaltige Suchanfragen in Kombination.
Disjunktions- und Negationsoperatoren in der WHERE
-Klausel enthalten. Sie können alle folgenden Abfragetypen mit einem Suchindex verwenden:
Verbindung: Hiermit werden Dokumente gefunden, in denen
Title
den Begriff „Auto“ undStudio
den Begriff „Sonne“ enthält.SELECT AlbumId FROM Albums WHERE SEARCH(Title_Tokens, 'car') AND SEARCH(Studio_Tokens, 'sun')
Disjunktion: Findet Dokumente, in denen
Title
den Begriff „Auto“ enthält oderStudio
enthält den Begriff „Sonne“SELECT AlbumId FROM Albums WHERE SEARCH(Title_Tokens, 'car') OR SEARCH(Studio_Tokens, 'sun')
Negation: Findet alle Dokumente, in denen
Title
den Begriff nicht enthält „auto“.SELECT AlbumId FROM Albums WHERE NOT SEARCH(Title_Tokens, 'car')
Mit der rquery-Sprache können Sie dieselben Suchanfragen ausführen:
SELECT AlbumId FROM Albums WHERE SEARCH(Title_Tokens, '-car')
Mit beiden Formularen werden Dokumente gefiltert, bei denen
Title
NULL ist. Tokenisierung und Suchfunktionen sind so definiert, dass sie bei einer NULL-Eingabe NULL zurückgeben. SQL definiert NOT NULL as NULL.
Außerdem können Sie auf dieselbe TOKENLIST
-Spalte mehrmals verweisen.
SELECT AlbumId
FROM Albums
WHERE (SEARCH(Title_Tokens, 'car') OR SEARCH(Studio_Tokens, 'sun'))
AND (SEARCH(Title_Tokens, 'guy') OR SEARCH(Studio_Tokens, electric))
Verwenden Sie entweder die Sprache rquery oder SQL, um nach mehreren Begriffen in derselben Spalte zu suchen. „rquery“ wird empfohlen dank effizientem Abfrage-Caching für parametrisierte Abfragen. Abgesehen von der besseren Trefferquote im Abfrage-Cache Die Sprachen rquery und SQL haben die gleichen Latenz- und Leistungsraten.
SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, 'car OR guy')
SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, 'car') OR SEARCH(Title_Tokens, 'guy')
Sie können Nicht-Text-Bedingungen verwenden, die mit Suchindexen mit Volltext beschleunigt werden Suchfunktionen.
Nächste Schritte
- Weitere Informationen zu Volltextsuchanfragen
- Weitere Informationen zum Ranking von Suchergebnissen
- Weitere Informationen zum Durchführen einer Teilstring-Suche
- Weitere Informationen zur Paginierung von Suchergebnissen
- Weitere Informationen zum Kombinieren von Volltext- und Nicht-Textabfragen