除了為文字建立索引之外,Spanner 搜尋索引還提供一種有效的方式,可為 JSON 和 JSONB 文件建立索引並查詢這些文件。使用搜尋索引針對獨立的 JSON 和 JSONB 查詢,或用於增強其他全文搜尋查詢。
詳情請參閱「索引 JSON 資料」和「索引 JSONB 資料」。
將 JSON 和 JSONB 切割成符號
您可以使用 TOKENIZE_JSON
函式在 GoogleSQL 中建立 JSON 索引,也可以使用 TOKENIZE_JSONB
函式在 PostgreSQL 中建立 JSONB 索引。詳情請參閱 TOKENIZE_JSON
和 TOKENIZE_JSONB
。
JSON 和 JSONB 查詢
您可以使用搜尋索引加快包含 JSON 包含和鍵存在條件的查詢。JSON 包含性可判斷一個 JSON 文件是否包含在另一個 JSON 文件中。鍵存在性決定金鑰是否存在於資料庫結構定義中。
在 GoogleSQL 中:
- 使用
JSON_CONTAINS
函式,在結構定義中表達 JSON 包含關係。 - 使用欄位存取、陣列下標運算子和
IS NOT NULL
建構鍵存在條件。欄位存取和陣列下標運算子可用來描述 JSON 文件路徑。IS NOT NULL
會檢查此路徑是否存在 (例如doc.sub.path[@index].key IS NOT NULL
)。
- 使用
在 PostgreSQL 中:
在查詢中,您可以在搜尋索引中加入多個任何類型的 JSON 條件。您也可以使用 AND
、OR
和 NOT
,將 JSON 條件納入邏輯組合。
查看搜尋索引使用情形
如要確認查詢是否使用搜尋索引,請在查詢執行計畫中尋找搜尋索引掃描節點。
限制
- 搜尋索引 (包括 JSON 和 JSONB 搜尋索引) 僅用於唯讀交易。Spanner 可能會在讀寫交易中使用相關的次要索引。如果您嘗試在讀寫交易中強制使用搜尋索引,系統會發生以下錯誤:
ERROR: spanner: code = "InvalidArgument", desc = "The search index AlbumsIndex cannot be used in transactional queries by default."
- 嘗試在搜尋索引建立中儲存特定大型或非常複雜的 JSON 文件時,可能會傳回
too many search token bytes
錯誤。這個 JSON 文件的輸出符記大小必須小於 10 MB。如果您不需要整份文件皆可搜尋,請考慮擷取文件的較小子集 (例如使用產生的資料欄),然後改為搜尋該資料欄。
後續步驟
- 瞭解權杖化和符號產生器。
- 瞭解搜尋索引。
- 瞭解如何索引 JSON 資料。
- 瞭解如何索引 JSONB 資料。