Menelusuri beberapa kolom dalam indeks penelusuran

Indeks penelusuran dapat mengindeks beberapa kolom yang ditokenisasi, sehingga kueri pada kolom ini menjadi lebih efisien. Halaman ini menjelaskan cara melakukan penelusuran di beberapa kolom, yang merupakan jenis penelusuran teks lengkap.

Struktur indeks penelusuran memastikan kueri tidak memerlukan join terdistribusi, sehingga memastikan performa kueri yang dapat diprediksi. Join terdistribusi dihindari karena kolokasi semua token yang sesuai dengan baris tabel dasar pada bagian yang sama.

Misalnya, perhatikan skema berikut:

CREATE TABLE Albums (
  AlbumId STRING(MAX) NOT NULL,
  Title STRING(MAX),
  Studio STRING(MAX),
  Title_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(Title)) HIDDEN,
  Studio_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(Studio)) HIDDEN
) PRIMARY KEY(AlbumId);

CREATE SEARCH INDEX AlbumsIndex ON Albums(Title_Tokens, Studio_Tokens);

Kueri kini dapat menelusuri kedua kolom:

SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, "fifth symphony")
  AND SEARCH(Studio_Tokens, "Blue Note Studio")

Spanner mendukung kueri penelusuran multi-kolom dalam operator konjungsi, disjungsi, dan negasi dalam klausa WHERE. Anda dapat menggunakan semua jenis kueri berikut dengan indeks penelusuran:

  • Konjungsi: Temukan dokumen yang Title-nya memiliki istilah "mobil" dan Studio-nya memiliki istilah "matahari".

    SELECT AlbumId
    FROM Albums
    WHERE SEARCH(Title_Tokens, 'car') AND SEARCH(Studio_Tokens, 'sun')
    
  • Disjungsi: Menemukan dokumen yang Title-nya berisi istilah "mobil" atau Studio-nya berisi istilah "matahari"

    SELECT AlbumId
    FROM Albums
    WHERE SEARCH(Title_Tokens, 'car') OR SEARCH(Studio_Tokens, 'sun')
    
  • Negasi: Temukan semua dokumen yang Title-nya tidak berisi istilah "mobil".

    SELECT AlbumId
    FROM Albums
    WHERE NOT SEARCH(Title_Tokens, 'car')
    

    Bahasa rquery dapat melakukan jenis penelusuran yang sama:

    SELECT AlbumId
    FROM Albums
    WHERE SEARCH(Title_Tokens, '-car')
    

    Kedua formulir memfilter dokumen dengan Title adalah NULL. Fungsi tokenisasi dan penelusuran ditentukan untuk menampilkan NULL pada input NULL. SQL menentukan NOT NULL sebagai NULL.

Selain itu, Anda dapat mereferensikan kolom TOKENLIST yang sama beberapa kali.

SELECT AlbumId
FROM Albums
WHERE (SEARCH(Title_Tokens, 'car') OR SEARCH(Studio_Tokens, 'sun'))
  AND (SEARCH(Title_Tokens, 'guy') OR SEARCH(Studio_Tokens, electric))

Gunakan bahasa rquery atau SQL untuk menelusuri beberapa istilah dalam kolom yang sama. rquery direkomendasikan karena cache kueri yang efisien untuk kueri berparameter. Selain rasio hit cache kueri yang lebih baik, bahasa kueri dan SQL memiliki rasio latensi dan performa yang sama.

SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, 'car OR guy')

SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, 'car') OR SEARCH(Title_Tokens, 'guy')

Anda dapat menggunakan kondisi non-teks yang dipercepat dengan indeks penelusuran dengan fungsi penelusuran teks lengkap.

Langkah selanjutnya