Indeks penelusuran dapat mengindeks beberapa kolom token, membuat kueri pada kolom ini lebih efisien. Ini menjelaskan cara melakukan penelusuran di beberapa kolom, yang merupakan jenis penelusuran teks lengkap.
Melakukan penelusuran multi-kolom
Struktur penelusuran indeks memastikan bahwa kueri tidak memerlukan gabungan yang terdistribusi, sehingga memastikan performa kueri. Gabungan yang terdistribusi dihindari karena kolokasi semua token yang sesuai dengan baris tabel dasar pada bagian yang sama.
Sebagai contoh, perhatikan skema berikut ini:
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);
Kueri sekarang dapat menelusuri kedua kolom:
SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, @p1) AND SEARCH(Studio_Tokens, @p2)
Spanner mendukung kueri penelusuran multi-kolom secara bersamaan,
operator disjungsi, dan negasi dalam klausa WHERE
. Anda bisa menggunakan semua
jenis kueri berikut dengan indeks penelusuran:
Konjungsi: Menemukan dokumen yang
Title
memiliki istilah "mobil" danStudio
memiliki istilah "sun".SELECT AlbumId FROM Albums WHERE SEARCH(Title_Tokens, 'car') AND SEARCH(Studio_Tokens, 'sun')
Pemisahan: Menemukan dokumen yang
Title
-nya memiliki istilah "mobil" atauStudio
memiliki istilah "sun"SELECT AlbumId FROM Albums WHERE SEARCH(Title_Tokens, 'car') OR SEARCH(Studio_Tokens, 'sun')
Negasi: Menemukan semua dokumen yang
Title
tidak berisi istilah tersebut "mobil".SELECT AlbumId FROM Albums WHERE NOT SEARCH(Title_Tokens, 'car')
Bahasa kueri dapat melakukan jenis penelusuran yang sama:
SELECT AlbumId FROM Albums WHERE SEARCH(Title_Tokens, '-car')
Kedua formulir memfilter dokumen dengan
Title
sebagai NULL. Tokenisasi dan fungsi pencarian didefinisikan untuk mengembalikan NULL pada input NULL. SQL mendefinisikan NOT NULL sebagai NULL.
Selain itu, Anda dapat mereferensikan kolom TOKENLIST
yang sama beberapa kali.
SELECT AlbumId
FROM Albums
WHERE (SEARCH(Title_Tokens, 'car') OR SEARCH(Studio_Tokens, 'sun'))
AND (SEARCH(Title_Tokens, 'guy') OR SEARCH(Studio_Tokens, electric))
Gunakan bahasa rquery atau SQL untuk mencari beberapa istilah di kolom yang sama. kueri direkomendasikan karena cache kueri yang efisien untuk kueri berparameter. Selain rasio cache kueri yang lebih baik, bahasa kueri dan SQL memiliki latensi dan tingkat performa yang sama.
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')
Anda dapat menggunakan kondisi non-teks yang dipercepat dengan indeks penelusuran dengan teks lengkap fungsi-fungsi pencarian.
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 menggabungkan kueri teks lengkap dan non-teks.