除了将文本编入索引外, 搜索索引提供 将数字编入索引的高效方法。它主要用于通过对数字字段的条件来增强全文搜索查询。本页介绍了索引数字相等性 和不等式查询,以及将数字数组编入索引。
对数字进行词元化
您可以使用 TOKENIZE_NUMBER
函数创建数字索引。如需了解详情,请参阅
请参阅 TOKENIZE_NUMBER
。
等式和不等式查询的索引编号
Spanner 支持对数字进行索引编制,以便进行等式和不等式比较。等式搜索匹配数字。范围和不等式搜索与数字匹配
特定范围内的您可以在
TOKENIZE_NUMBER
comparison_type
参数:
- Equality:
comparison_type=>"equality"
- 不等式和等式:
comparison_type=>"all"
在这两种情况下,原始数(整数或浮点数)都会经过 词元化过程,该过程在概念上类似于全文 标记化。它会生成一组令牌,然后查询可以使用这些令牌来查找与数字条件匹配的文档。
等式编制索引只会生成一个令牌,该令牌表示数字。这个
如果查询仅包含 field = @p
形式的条件,则建议使用模式
。WHERE
不等式和等式索引可以加速处理更多条件,
查询的 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(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])
后续步骤
- 了解令牌化和 Spanner 令牌化器。
- 了解搜索索引。
- 了解索引分区。