数字搜索索引

除了为文本编制索引之外,搜索索引还提供了一种高效的方法来为数字编制索引。它主要用于通过对数字字段的条件来增强全文搜索查询。本页介绍了如何为等式和不等式查询编制数字索引,以及如何为数字数组编制索引。

对数字进行分词

您可以使用 TOKENIZE_NUMBER 函数创建数字索引。如需了解详情,请参阅 TOKENIZE_NUMBER

等式和不等式查询的索引编号

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])

后续步骤