Indeks penelusuran JSON

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).
  • 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.

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