除了為文字建立索引外,搜尋索引還提供一種有效的方法來為數字建立索引。主要用於針對數值欄位設定條件,擴充全文搜尋查詢。本頁面說明如何為等式和不等式查詢建立索引數字,以及為數字陣列建立索引。
將數字權杖化
數字符號產生器會產生一組符號,用於加快數字比較搜尋速度。
使用 TOKENIZE_NUMBER
函式建立數值索引。TOKENIZE_NUMBER
支援這些類型的 INT64
、FLOAT32
、FLOAT64
或 ARRAY
。
針對 PostgreSQL,請使用 spanner.tokenize_number
函式建立數值索引。spanner.tokenize_number
僅支援 bigint
類型。
等式和不等式查詢的索引編號
Spanner 支援用於相等和不等的索引編號。相等搜尋會比對數字。範圍和不等式搜尋會比對特定範圍內的數字。您可以在 TOKENIZE_NUMBER
comparison_type
參數中設定這個值:
- 相等:
comparison_type=>"equality"
- 不等式和等式:
comparison_type=>"all"
在兩種情況下,原始數字 (整數或浮點) 都會經過符號化程序,其概念與全文符號化相似。它會產生一組符記,讓查詢使用這些符記找出符合數字條件的文件。
相等索引只會產生一個符記,代表該數字。如果查詢在 WHERE
子句中只有 field = @p
形式的條件,建議使用這個模式。
不等式和相等式索引可加快查詢 WHERE
子句中更廣泛的條件速度。除了相等條件之外,這也包括 field < @p
、field <= @p
、field > @p
、field >= @p
、field BETWEEN @p1 and @p2
和 field <> @p
。為了實作這類索引,Spanner 會在基礎搜尋索引中產生符記。根據調整參數,Spanner 可以為每個已編入索引的數字產生許多符記。符記數量取決於為 TOKENIZE_NUMBER
設定的參數,例如 algorithm
、min
、max
和 granularity
。因此,請務必仔細評估調整參數,確保磁碟儲存空間和查詢時間之間取得適當平衡。
陣列符記化
除了純量值外,TOKENIZE_NUMBER
也支援陣列數字的符記化。
當 TOKENIZE_NUMBER
與 ARRAY
欄搭配使用時,您必須指定 comparison_type=>"equality"
。範圍查詢不支援數字陣列。
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
Ratings ARRAY<INT64>,
Ratings_Tokens TOKENLIST
AS (TOKENIZE_NUMBER(Ratings, comparison_type=>"equality")) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsIndex ON Albums(Ratings_Tokens);
以下查詢會找出所有評分為 1 或 2 的專輯:
SELECT AlbumId
FROM Albums
WHERE ARRAY_INCLUDES_ANY(Ratings, [1, 2])
下列查詢會找出所有評分為 1 和 5 的專輯:
SELECT AlbumId
FROM Albums
WHERE ARRAY_INCLUDES_ALL(Ratings, [1, 5])
後續步驟
- 瞭解權杖化和 Spanner 分詞器。
- 瞭解搜尋索引。
- 瞭解索引區隔。