Selain mengindeks teks, indeks penelusuran Spanner menyediakan cara yang efisien untuk mengindeks dan membuat kueri dokumen JSON dan JSONB. Gunakan indeks penelusuran untuk kueri JSON dan JSONB mandiri, atau untuk menambah kueri penelusuran teks lengkap lainnya.
Untuk mengetahui informasi selengkapnya, lihat Mengindeks data JSON dan Mengindeks data JSONB.
Membuat token JSON dan JSONB
Anda dapat menggunakan fungsi TOKENIZE_JSON
untuk membuat indeks JSON di GoogleSQL, atau fungsi TOKENIZE_JSONB
untuk membuat indeks JSONB di PostgreSQL. Untuk mengetahui detailnya, lihat TOKENIZE_JSON
dan TOKENIZE_JSONB
.
Kueri JSON dan JSONB
Anda dapat menggunakan indeks penelusuran untuk mempercepat kueri yang menyertakan kondisi pembatasan JSON dan eksistensi kunci. Pembatasan JSON menentukan apakah satu dokumen JSON terdapat dalam dokumen JSON lainnya. Keberadaan kunci menentukan apakah kunci ada dalam skema database.
Di GoogleSQL:
- Ekspresikan pembatasan JSON dalam skema Anda menggunakan fungsi
JSON_CONTAINS
. - Buat kondisi keberadaan kunci menggunakan akses kolom, operator subskrip
array, dan
IS NOT NULL
. Operator akses kolom dan subskrip array mendeskripsikan jalur dokumen JSON.IS NOT NULL
memeriksa keberadaan jalur ini (misalnya,doc.sub.path[@index].key IS NOT NULL
).
- Ekspresikan pembatasan JSON dalam skema Anda menggunakan fungsi
Di PostgreSQL:
- Ekspresikan pembatasan JSONB menggunakan operator
@>
dan<@
. Untuk mengetahui informasi selengkapnya, lihat operator JSONB. - Buat kondisi keberadaan kunci menggunakan operator
?
,?|
, dan?&
. Untuk mengetahui informasi selengkapnya, lihat Operator JSONB.
- Ekspresikan pembatasan JSONB menggunakan operator
Dalam kueri, Anda dapat menyertakan beberapa kondisi JSON dari jenis apa pun dalam
indeks penelusuran. Anda juga dapat menyertakan kondisi JSON dalam kombinasi logis menggunakan AND
, OR
, dan NOT
.
Memeriksa penggunaan indeks penelusuran
Untuk memeriksa apakah kueri Anda menggunakan indeks penelusuran, cari node Pemindaian indeks penelusuran di rencana eksekusi kueri.
Pembatasan
- Indeks penelusuran, termasuk indeks penelusuran JSON dan JSONB, hanya digunakan dalam transaksi hanya baca. Spanner mungkin menggunakan indeks sekunder
yang relevan dalam transaksi baca-tulis. Jika Anda mencoba memaksa penggunaan
indeks penelusuran dalam transaksi baca-tulis, error berikut akan terjadi:
ERROR: spanner: code = "InvalidArgument", desc = "The search index AlbumsIndex cannot be used in transactional queries by default."
- Upaya untuk menyimpan dokumen JSON tertentu yang besar atau sangat kompleks dalam
indeks penelusuran dapat menampilkan error
too many search token bytes
. Ukuran token output dari dokumen JSON ini harus lebih kecil dari 10 MB. Jika Anda tidak memerlukan seluruh dokumen untuk ditelusuri, pertimbangkan untuk mengekstrak subset yang lebih kecil dari dokumen (misalnya, dengan menggunakan kolom yang dihasilkan) dan menelusuri kolom tersebut.
Langkah berikutnya
- Pelajari tokenisasi dan tokenizer.
- Pelajari indeks penelusuran.
- Pelajari cara mengindeks data JSON.
- Pelajari cara mengindeks data JSONB.