Selain pencocokan token lengkap, indeks penelusuran Spanner mendukung penelusuran substring. Halaman ini menjelaskan cara melakukan penelusuran substring sebagai bagian dari penelusuran teks lengkap di Spanner.
Penelusuran substring memiliki karakteristik berikut:
- Tidak peka huruf besar/kecil, menghapus sebagian besar tanda baca, dan menormalisasi spasi.
- Tidak ada segmentasi bahasa China, Jepang, Korea (CJK), karena kueri CJK parsial sering kali disegmentasikan dengan tidak benar.
- Untuk beberapa istilah penelusuran, hasilnya harus berisi substring dari setiap istilah. Misalnya,
'happ momen'cocok dengan"happy moment", karena kedua substring ditemukan dalam teks. Tidak cocok dengan"happy day".
Contoh
| Teks tersimpan | Kueri substring | Match |
|---|---|---|
| Bridge over Troubled Water | ridg roub | Ya |
| Bridge over Troubled Water | ridg , roub | Ya |
| Bridge over Troubled Water | over brid | Ya |
| Bridge over Troubled Water | jembatan ate | Ya |
| Bridge over Troubled Water | Jembatan jembatan jembatan | Ya |
| Bridge over Troubled Water | bri trou ter | Ya |
| Bridge over Troubled Water | bri dge | Ya |
| Bridge over Troubled Water | troubledwater | Tidak |
| Bridge over Troubled Water | trubled | Tidak |
Untuk penelusuran substring, gunakan fungsi TOKENIZE_SUBSTRING
dalam definisi kolom TOKENLIST, seperti yang ditunjukkan dalam contoh DDL
berikut:
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
Contoh ini menggunakan
spanner.tokenize_substring.
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);
Dalam kueri SQL, gunakan fungsi SEARCH_SUBSTRING dalam klausa WHERE. Misalnya, kueri berikut cocok dengan album berjudul "happy" dari tabel
yang dibuat dalam contoh sebelumnya:
GoogleSQL
SELECT AlbumId
FROM Albums
WHERE SEARCH_SUBSTRING(AlbumTitle_Tokens, 'happ');
PostgreSQL
Contoh ini menggunakan
spanner.search_substring.
SELECT albumid
FROM albums
WHERE spanner.search_substring(albumtitle_tokens, 'happ');
TOKENIZE_SUBSTRING menghasilkan n-gram
untuk setiap token dan menyimpan n-gram ini dalam indeks penelusuran. Panjang n-gram minimum dan
maksimum yang akan dibuat dikonfigurasi melalui argumen opsional.
Indeks penelusuran substring dapat menggunakan penyimpanan 10-30x lebih banyak daripada indeks teks lengkap untuk data yang sama, karena tokenisasi menghasilkan lebih banyak token. Hal ini terutama berlaku jika perbedaan antara ngram_size_min dan ngram_size_max semakin besar. Kueri substring juga menggunakan lebih banyak resource untuk dieksekusi.
Seperti TOKENIZE_FULLTEXT,
Anda dapat mengonfigurasi TOKENIZE_SUBSTRING untuk menggunakan jenis konten tertentu.
Mengaktifkan penelusuran substring relatif
Selain penelusuran substring dasar, SEARCH_SUBSTRING mendukung mode penelusuran relatif. Penelusuran relatif mempertajam hasil penelusuran substring.
Untuk mengaktifkan mode penelusuran relatif, tetapkan parameter relative_search_types dari
TOKENIZE_SUBSTRING
ke array yang tidak kosong dengan elemen jenis penelusuran relatif yang didukung.
Jika penelusuran relatif diaktifkan dalam tokenisasi, SEARCH_SUBSTRING dapat melakukan
kueri dengan jenis penelusuran relatif berikut:
phrase: mencocokkan substring yang berdekatanContoh
Teks tersimpan Kueri substring. Match Bridge over Troubled Water jembatan di atas Ya Bridge over Troubled Water Jembatan jembatan jembatan Tidak Bridge over Troubled Water brid over Tidak Bridge over Troubled Water mengatasi masalah Ya Bridge over Troubled Water jembatan di atas perairan yang bergejolak Tidak Bridge over Troubled Water idge ove Ya Bridge over Troubled Water idge , ove Ya Bridge over Troubled Water RIDGE OVE Ya Bridge over Troubled Water air jembatan Tidak value_prefix: mencocokkan substring yang berdekatan dan kecocokan harus dimulai di awal nilai. Secara konseptual, hal ini mirip dengan fungsiSTARTS_WITHuntuk string yang dinormalisasi menurut huruf besar/kecil dan spasi.Contoh
Teks tersimpan Kueri substring Match Bridge over Troubled Water jembatan di atas Ya Bridge over Troubled Water jembatan , di atas Ya Bridge over Troubled Water melintasi punggungan Tidak Bridge over Troubled Water air yang bergejolak Tidak value_suffix: mencocokkan substring yang berdekatan dan kecocokan harus cocok di akhir nilai. Secara konseptual, hal ini mirip dengan fungsiENDS_WITHuntuk string yang dinormalisasi menurut huruf besar/kecil dan spasi.Contoh
Teks tersimpan Kueri substring. Match Bridge over Troubled Water air yang bergejolak Ya Bridge over Troubled Water air ; bermasalah Ya Bridge over Troubled Water air keruh Ya Bridge over Troubled Water air bermasalah Tidak Bridge over Troubled Water air bermasalah Tidak Bridge over Troubled Water jembatan di atas Tidak word_prefix:sepertivalue_prefix, tetapi string harus cocok di batas istilah (bukan batas nilai).Contoh
Teks tersimpan Kueri substring Match Bridge over Troubled Water mengatasi masalah Ya Bridge over Troubled Water Over , trouble Ya Bridge over Troubled Water air keruh Tidak Bridge over Troubled Water di atas air Tidak Bridge over Troubled Water ove bermasalah Tidak Bridge over Troubled Water ver bermasalah Ya word_suffix: sepertivalue_suffix, tetapi string harus cocok di akhir batas istilah.Contoh
Teks tersimpan Kueri substring Match Bridge over Troubled Water ver bermasalah Ya Bridge over Troubled Water mengatasi masalah Tidak Bridge over Troubled Water di atas air Tidak Bridge over Troubled Water ove bermasalah Tidak
Langkah berikutnya
- Pelajari kueri penelusuran teks lengkap.
- Pelajari cara mengurutkan hasil penelusuran.
- Pelajari cara memberi nomor halaman pada hasil penelusuran.
- Pelajari cara mencampur kueri teks lengkap dan non-teks.
- Pelajari cara menelusuri beberapa kolom.