数値検索インデックス

検索インデックスは、テキストのインデックス作成に加えて、数値のインデックス作成を効率的に行う方法として利用できます。主に、数値フィールドの条件を使用して全文検索クエリを拡張するために使用されます。このページでは、等式クエリと不等式クエリの数値のインデックス登録と、数値の配列のインデックス登録について説明します。

数値をトークン化する

TOKENIZE_NUMBER 関数を使用して数値インデックスを作成します。詳細については、TOKENIZE_NUMBER をご覧ください。

等式と不等式クエリのインデックス番号

Spanner は、等式不等式の数値のインデックス作成をサポートしています。等価検索は数値と一致します。範囲と不等式の検索では、特定の範囲内の数値を照合します。この値は、TOKENIZE_NUMBER comparison_type パラメータで設定します。

  • 等式: comparison_type=>"equality"
  • 不等式と等式: comparison_type=>"all"

どちらの場合も、元の数値(整数または浮動小数点)はトークン化プロセスを受けます。これは、全文トークン化に似た概念です。これにより、クエリで数値条件に一致するドキュメントを検索するために使用できるトークンのセットが生成されます。

等価インデックス付けでは、数値を表すトークンが 1 つだけ生成されます。このモードは、クエリに 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(Grades_Tokens);

次のクエリは、評価が 1 または 2 のすべてのアルバムを検索します。

SELECT AlbumId
FROM Albums
WHERE ARRAY_CONTAINS_ANY(Ratings, [1, 2])

次のクエリは、1 と 5 と評価されたアルバムをすべて検索します。

SELECT AlbumId
FROM Albums
WHERE ARRAY_CONTAINS_ALL(Ratings, [1, 5])

次のステップ