數字搜尋索引

除了為文字建立索引外,搜尋索引還提供一種有效的方法來為數字建立索引。主要用於針對數值欄位設定條件,擴充全文搜尋查詢。本頁面說明如何為等式和不等式查詢建立索引數字,以及為數字陣列建立索引。

將數字權杖化

數字符號產生器會產生一組符號,用於加快數字比較搜尋速度。

使用 TOKENIZE_NUMBER 函式建立數值索引。TOKENIZE_NUMBER 支援這些類型的 INT64FLOAT32FLOAT64ARRAY

針對 PostgreSQL,請使用 spanner.tokenize_number 函式建立數值索引。spanner.tokenize_number 僅支援 bigint 類型。

等式和不等式查詢的索引編號

Spanner 支援用於相等不等的索引編號。相等搜尋會比對數字。範圍和不等式搜尋會比對特定範圍內的數字。您可以在 TOKENIZE_NUMBER comparison_type 參數中設定這個值:

  • 相等comparison_type=>"equality"
  • 不等式和等式comparison_type=>"all"

在兩種情況下,原始數字 (整數或浮點) 都會經過符號化程序,其概念與全文符號化相似。它會產生一組符記,讓查詢使用這些符記找出符合數字條件的文件。

相等索引只會產生一個符記,代表該數字。如果查詢在 WHERE 子句中只有 field = @p 形式的條件,建議使用這個模式。

不等式和相等式索引可加快查詢 WHERE 子句中更廣泛的條件速度。除了相等條件之外,這也包括 field < @pfield <= @pfield > @pfield >= @pfield BETWEEN @p1 and @p2field <> @p。為了實作這類索引,Spanner 會在基礎搜尋索引中產生符記。根據調整參數,Spanner 可以為每個已編入索引的數字產生許多符記。符記數量取決於為 TOKENIZE_NUMBER 設定的參數,例如 algorithmminmaxgranularity。因此,請務必仔細評估調整參數,確保磁碟儲存空間和查詢時間之間取得適當平衡。

陣列符記化

除了純量值外,TOKENIZE_NUMBER 也支援陣列數字的符記化。

TOKENIZE_NUMBERARRAY 欄搭配使用時,您必須指定 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])

後續步驟