Melakukan penelusuran substring

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.

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 berdekatan

    Contoh

    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 fungsi STARTS_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 fungsi ENDS_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: seperti value_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: seperti value_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