Melakukan penelusuran substring

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.

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