Halaman ini menjelaskan cara melakukan penelusuran yang menggabungkan teks lengkap dan non-teks layanan otomatis dan data skalabel.
Melakukan penelusuran campuran teks lengkap dan non-teks
Dukungan indeks penelusuran
kolom teks lengkap, pencocokan persis, dan angka. Anda dapat menggabungkan teks dan non-teks
kondisi dalam klausa WHERE
mirip dengan kueri penelusuran multi-kolom. Tujuan
pengoptimal kueri mencoba mengoptimalkan predikat non-teks dengan indeks penelusuran. Jika
tidak mungkin, Spanner mengevaluasi kondisi untuk setiap baris
yang cocok dengan indeks penelusuran. Kolom yang dirujuk tidak disimpan dalam indeks penelusuran
atau diambil dari tabel dasar.
Misalnya, perhatikan contoh berikut:
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
Title STRING(MAX),
Rating FLOAT64,
Genres ARRAY<STRING(MAX)>,
Likes INT64,
Cover BYTES(MAX),
Title_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(Title)) HIDDEN,
Rating_Tokens TOKENLIST AS (TOKENIZE_NUMBER(Rating)) HIDDEN,
Genres_Tokens TOKENLIST AS (TOKEN(Genres)) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsIndex
ON Albums(Title_Tokens, Rating_Tokens, Genres_Tokens)
STORING Likes;
Perilaku kueri pada tabel ini mencakup hal berikut:
Rating
danGenres
disertakan dalam indeks penelusuran. Spanner mempercepat kondisi menggunakan postingan indeks penelusuran daftar.SELECT Album FROM Albums WHERE Rating > 4 AND ARRAY_INCLUDES_ANY(Genres, ['jazz'])
Kueri dapat menggabungkan konjungsi, disjungsi, dan negasi dengan cara apa pun, termasuk mencampur predikat teks lengkap dan non-teks. Kueri ini sepenuhnya dipercepat oleh indeks penelusuran.
SELECT Album FROM Albums WHERE (SEARCH(Title_Tokens, 'car') OR Rating > 4) AND NOT ARRAY_INCLUDES_ANY(Genres, ['jazz'])
Likes
disimpan dalam indeks, tetapi skema tidak meminta Spanner untuk membangun indeks token untuk nilai yang memungkinkan. Oleh karena itu, predikat teks lengkap padaTitle
dan predikat non-teks diRating
dipercepat, tetapi predikat padaLikes
tidak. Di beberapa Spanner, kueri tersebut mengambil semua dokumen dengan istilah "car" diTitle
dan memiliki rating lebih dari 4, fitur ini akan memfilter dokumen yang tidak memiliki setidaknya 1000 suka. Kueri ini menggunakan banyak sumber daya jika hampir semua album memiliki istilah "car" pada judul mereka dan hampir semuanya memiliki peringkat 5, tetapi beberapa album yang memiliki 1000 suka. Dalam kasus tersebut, pengindeksanLikes
yang mirip denganRating
menghemat resource.SELECT Album FROM Albums WHERE SEARCH(Title_Tokens, 'car') AND Rating > 4 AND Likes >= 1000
Cover
tidak disimpan dalam indeks. Kueri berikut melakukan kembali bergabung antaraAlbumsIndex
danAlbums
untuk mengambilCover
bagi semua album yang cocok.SELECT AlbumId, Cover FROM Albums WHERE SEARCH(Title_Tokens, 'car') AND Rating > 4
Langkah selanjutnya
- Pelajari kueri penelusuran teks lengkap.
- Pelajari cara memberi peringkat hasil penelusuran.
- Pelajari cara melakukan penelusuran substring.
- Pelajari cara memberi nomor halaman pada hasil penelusuran.
- Pelajari cara menelusuri beberapa kolom.