Selain pencocokan token penuh, Spanner indeks penelusuran mendukung pencarian {i>substring<i}. Halaman ini menjelaskan cara melakukan {i>substring<i} melakukan penelusuran sebagai bagian dari penelusuran teks lengkap di Spanner.
Ringkasan
Penelusuran substring memiliki karakteristik berikut:
- Tidak peka huruf besar/kecil, membuang sebagian besar tanda baca, dan menormalisasi spasi kosong.
- Tidak ada segmentasi bahasa China, Jepang, Korea (CJK), karena kueri CJK parsial seringkali salah menentukan segmen.
- Untuk beberapa istilah penelusuran, hasilnya harus berisi {i>substring<i} dari setiap
jangka panjang. Misalnya,
'happ momen'
cocok dengan"happy moment"
, karena keduanya {i>substring <i}ditemukan dalam teks. Hasil ini tidak cocok dengan"happy day"
.
Contoh
Teks tersimpan | Kueri substring | Match |
---|---|---|
Jembatan di atas Air Bermasalah | Ridg Roub | Ya |
Jembatan di atas Air Bermasalah | ridg , roub | Ya |
Jembatan di atas Air Bermasalah | over brid | Ya |
Jembatan di atas Air Bermasalah | ate bridge | Ya |
Jembatan di atas Air Bermasalah | Jembatan jembatan | Ya |
Jembatan di atas Air Bermasalah | {i>bri trou ter<i} | Ya |
Jembatan di atas Air Bermasalah | Bri dge | Ya |
Jembatan di atas Air Bermasalah | masalah | Tidak |
Jembatan di atas Air Bermasalah | terbata-bata | Tidak |
Untuk penelusuran substring, gunakan fungsi TOKENIZE_SUBSTRING
di TOKENLIST
definisi kolom, seperti yang ditampilkan 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
. Sebagai
contoh, kueri berikut ini cocok dengan album berjudul "happy" dari tabel
yang dibuat di 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 pencarian. Nilai minimum dan
panjang maksimum n-gram yang akan dihasilkan
dikonfigurasi melalui argumen opsional.
Indeks pencarian {i>substring<i} dapat menggunakan penyimpanan 10-30x lebih banyak dibandingkan indeks teks lengkap
data yang sama, karena tokenisasi menghasilkan lebih banyak token. Ini adalah
terutama benar jika sebagai perbedaan antara ngram_size_min
dan
ngram_size_max
tumbuh. Kueri {i>substring<i} juga menggunakan lebih banyak sumber daya untuk dieksekusi.
Seperti TOKENIZE_FULLTEXT
,
Anda dapat mengonfigurasi TOKENIZE_SUBSTRING
untuk menggunakan jenis konten tertentu.
Mengaktifkan penelusuran substring relatif
Selain pencarian {i>substring<i} dasar,
SEARCH_SUBSTRING
mendukung mode pencarian relatif. Penelusuran relatif menyaring penelusuran substring
hasil pengujian tersebut.
Untuk mengaktifkan mode penelusuran relatif, setel atribut
TOKENIZE_SUBSTRING
parameter relative_search_types
ke TRUE.
Saat penelusuran relatif diaktifkan dalam tokenisasi, SEARCH_SUBSTRING
dapat melakukan
kueri dengan jenis penelusuran relatif berikut:
value_prefix
: mencocokkan substring yang berdekatan dan pencocokannya harus dimulai dari awal nilai. Secara konsep mirip dengan FungsiSTARTS_WITH
untuk string yang dinormalisasi dengan huruf besar/kecil dan spasi kosong.Contoh
Teks tersimpan Kueri substring Match Jembatan di atas Air Bermasalah jembatan Ya Jembatan di atas Air Bermasalah jembatan , di atas Ya Jembatan di atas Air Bermasalah bergelombang di atas Tidak Jembatan di atas Air Bermasalah air bermasalah Tidak value_suffix
: cocok dengan substring yang berdekatan dan pencocokan harus cocok di akhir nilai. Secara konsep mirip denganENDS_WITH
untuk string yang dinormalisasi dengan huruf besar/kecil dan spasi kosong.Contoh
Teks tersimpan Kueri substring. Match Jembatan di atas Air Bermasalah air bermasalah Ya Jembatan di atas Air Bermasalah bermasalah; air Ya Jembatan di atas Air Bermasalah air rubel Ya Jembatan di atas Air Bermasalah wate bermasalah Tidak Jembatan di atas Air Bermasalah air bermasalah Tidak Jembatan di atas Air Bermasalah jembatan Tidak word_prefix:
sepertivalue_prefix
, tetapi string harus cocok pada suatu istilah batas (bukan batas nilai).Contoh
Teks tersimpan Kueri substring Match Jembatan di atas Air Bermasalah terkait masalah Ya Jembatan di atas Air Bermasalah Di atas , masalah Ya Jembatan di atas Air Bermasalah air troub Tidak Jembatan di atas Air Bermasalah di atas air Tidak Jembatan di atas Air Bermasalah susah payah Tidak Jembatan di atas Air Bermasalah ver bermasalah Ya word_suffix
: sepertivalue_suffix
, tetapi stringnya harus cocok di akhir dari suatu batas istilah.Contoh
Teks tersimpan Kueri substring Match Jembatan di atas Air Bermasalah ver bermasalah Ya Jembatan di atas Air Bermasalah terkait masalah Tidak Jembatan di atas Air Bermasalah di atas air Tidak Jembatan di atas Air Bermasalah susah payah Tidak
Langkah selanjutnya
- Pelajari kueri penelusuran teks lengkap.
- Pelajari cara memberi peringkat hasil penelusuran.
- Pelajari cara memberi nomor halaman pada hasil penelusuran.
- Pelajari cara menggabungkan kueri teks lengkap dan non-teks.
- Pelajari cara menelusuri beberapa kolom.