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 kosong.
- Tidak ada segmentasi bahasa China, Jepang, Korea (CJK), karena kueri CJK parsial sering kali salah mengelompokkan.
- Untuk beberapa istilah penelusuran, hasilnya harus berisi substring dari setiap
istilah. Misalnya,
'happ momen'
cocok dengan"happy moment"
, karena kedua substring ditemukan dalam teks. Nama tersebut 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:
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
AlbumTitle STRING(MAX),
AlbumTitle_Tokens TOKENLIST AS (TOKENIZE_SUBSTRING(AlbumTitle)) HIDDEN
) PRIMARY KEY(AlbumId);
Dalam kueri SQL, gunakan fungsi SEARCH_SUBSTRING
dalam klausa WHERE
. Misalnya, kueri berikut cocok dengan album dengan judul "happy" dari tabel
yang dibuat dalam contoh sebelumnya:
SELECT Album
FROM Albums
WHERE SEARCH_SUBSTRING(AlbumTitle_Tokens, 'happ');
TOKENIZE_SUBSTRING
menghasilkan n-gram
untuk setiap token dan menyimpan n-gram ini dalam indeks penelusuran. Panjang minimum dan
maksimum n-gram yang akan dihasilkan dikonfigurasi melalui argumen opsional.
Indeks penelusuran substring dapat menggunakan penyimpanan 10-30x lebih banyak sebagai indeks teks lengkap pada data yang sama, karena tokenisasi menghasilkan lebih banyak token. Hal ini
terutama berlaku jika perbedaan antara ngram_size_min
dan
ngram_size_max
meningkat. 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 menyaring hasil penelusuran
substring.
Untuk mengaktifkan mode penelusuran relatif, tetapkan parameter
TOKENIZE_SUBSTRING
relative_search_types
ke BENAR.
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 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 bridge ove troubled 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 pencocokan harus dimulai di awal nilai. Secara konsep, ini mirip dengan fungsiSTARTS_WITH
untuk string yang dinormalisasi kasus dan spasi kosong.Contoh
Teks tersimpan Kueri substring Match Bridge over Troubled Water jembatan Ya Bridge over Troubled Water jembatan , di atas Ya Bridge over Troubled Water ridge over Tidak Bridge over Troubled Water air keruh Tidak value_suffix
: cocok dengan substring yang berdekatan dan kecocokan harus cocok di akhir nilai. Secara konsep, ini mirip dengan fungsiENDS_WITH
untuk string yang dinormalisasi kasus dan spasi kosong.Contoh
Teks tersimpan Kueri substring. Match Bridge over Troubled Water air keruh Ya Bridge over Troubled Water air ; bermasalah Ya Bridge over Troubled Water air yang berbuih Ya Bridge over Troubled Water air yang bermasalah Tidak Bridge over Troubled Water air bermasalah Tidak Bridge over Troubled Water jembatan 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 over trouble Ya Bridge over Troubled Water Lebih dari , masalah Ya Bridge over Troubled Water air troub Tidak Bridge over Troubled Water di atas air Tidak Bridge over Troubled Water mengalami masalah Tidak Bridge over Troubled Water ver troubled Ya word_suffix
: sepertivalue_suffix
, tetapi string harus cocok di akhir batas istilah.Contoh
Teks tersimpan Kueri substring Match Bridge over Troubled Water ver troubled Ya Bridge over Troubled Water over trouble Tidak Bridge over Troubled Water di atas air Tidak Bridge over Troubled Water mengalami masalah Tidak
Langkah selanjutnya
- Pelajari kueri penelusuran teks lengkap.
- Pelajari cara mengurutkan hasil penelusuran.
- Pelajari cara memberi nomor halaman pada hasil penelusuran.
- Pelajari cara menggabungkan kueri teks lengkap dan non-teks.
- Pelajari cara menelusuri beberapa kolom.