Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
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.
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.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Sulit dipahami","hardToUnderstand","thumb-down"],["Informasi atau kode contoh salah","incorrectInformationOrSampleCode","thumb-down"],["Informasi/contoh yang saya butuhkan tidak ada","missingTheInformationSamplesINeed","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2025-08-17 UTC."],[],[],null,["# JSON search indexes\n\n| **Note:** This feature is available with the Spanner Enterprise edition and Enterprise Plus edition. For more information, see the [Spanner editions overview](/spanner/docs/editions-overview).\n\n\u003cbr /\u003e\n\nIn addition to indexing text, the Spanner [search index](/spanner/docs/full-text-search/search-indexes)\nprovides an efficient way to index and query JSON and JSONB documents. Use\nsearch indexes for standalone JSON and JSONB queries, or to augment other\n[full-text search](/spanner/docs/full-text-search) queries.\n\nFor more information, see [Index JSON data](/spanner/docs/working-with-json#index) and\n[Index JSONB data](/spanner/docs/working-with-jsonb#index).\n\nTokenize JSON and JSONB\n-----------------------\n\nYou can use the `TOKENIZE_JSON` function to create a JSON index in\nGoogleSQL, or the `TOKENIZE_JSONB` function to create a JSONB index in\nPostgreSQL. For details, see [`TOKENIZE_JSON`](/spanner/docs/reference/standard-sql/search_functions#tokenize_json)\nand [`TOKENIZE_JSONB`](/spanner/docs/reference/postgresql/functions-and-operators#indexing).\n\nJSON and JSONB queries\n----------------------\n\nYou can use a search index to accelerate queries that include\n*JSON containment* and *key existence* conditions. JSON containment determines\nif one JSON document is contained within another. Key existence determines if a\nkey exists in the database schema.\n\n- In GoogleSQL:\n\n - Express JSON containment in your schema by using the [`JSON_CONTAINS`](/spanner/docs/reference/standard-sql/json_functions#json_contains) function.\n - Construct key existence conditions using the field access, array subscript operators, and `IS NOT NULL`. The field access and array subscript operators describe a JSON document path. `IS NOT NULL` checks for the existence of this path (for example, `doc.sub.path[@index].key IS NOT NULL`).\n- In PostgreSQL:\n\n - Express JSONB containment using the `@\u003e` and `\u003c@` operators. For more information, see [JSONB operators](/spanner/docs/reference/postgresql/functions-and-operators#jsonb_operators).\n - Construct key existence conditions using the `?`, `?|`, and `?&` operators. For more information, see [JSONB operators](/spanner/docs/reference/postgresql/functions-and-operators#jsonb_operators).\n\nIn your queries, you can include multiple JSON conditions of any type in the\nsearch index. You can also include the JSON conditions in a logical combination\nusing `AND`, `OR`, and `NOT`.\n\n### Check search index usage\n\nTo check that that your query uses a search index, look for a\n*Search index scan* node in the [query execution plan](/spanner/docs/query-execution-plans).\n\nRestrictions\n------------\n\n- Search indexes, including JSON and JSONB search indexes, are used only in read-only transactions. Spanner might use relevant secondary indexes in a read-write transaction. If you attempt to force the use of a search index in a read-write transaction, the following error occurs: `ERROR: spanner: code = \"InvalidArgument\", desc = \"The search index\n AlbumsIndex cannot be used in transactional queries by default.\"`\n- Attempts to store certain large or very complex JSON documents in a search index might return a `too many search token bytes` error. The output token size from this JSON document must be smaller than 10 MB. If you don't need the entire document to be searchable, consider extracting a smaller subset of the document (for example, by using a generated column) and searching over the column instead.\n\nWhat's next\n-----------\n\n- Learn about [tokenization and tokenizers](/spanner/docs/full-text-search/tokenization).\n- Learn about [search indexes](/spanner/docs/full-text-search/search-indexes).\n- Learn about [indexing JSON data](/spanner/docs/working-with-json#index).\n- Learn about [indexing JSONB data](/spanner/docs/working-with-jsonb#index)."]]