本页介绍了什么是全文搜索以及其运作方式。
借助全文搜索,您可以构建能够搜索表格以查找字词、短语或数字的应用,而不仅仅是在结构化字段中搜索完全匹配项。全文搜索会将最新的具有事务一致性的已提交数据返回给您的应用。Spanner 全文搜索功能还包括拼写纠正、自动检测搜索输入内容的语言以及对搜索结果进行排名。Spanner 会自动扩展文本搜索,以包含近似字词匹配。
您需要为要提供全文搜索功能的所有列创建搜索索引。Spanner 会分析这些列中的数据,以识别要添加到搜索索引中的各个字词。一旦新数据或修改后的数据提交到数据库,Spanner 就会使用这些数据更新搜索索引。
全文搜索类型
- 基本文本搜索:使用字词或词组的全部或部分内容搜索内容,以便可靠地获得结果。查询谓词示例:
- 匹配所有字词 [tricolor rat terrier]
- 与以下字词或词组完全匹配 ["rat terrier"]
- 以下任一字词 [miniature OR standard]
- 相邻字词 [world AROUND(3) cup]
- 子字符串 [start*]
- 数字搜索:执行数字等式和不等式搜索。等式搜索会匹配数字。范围搜索和不等式搜索会匹配特定范围内的数字。
- 基于 n 元语搜索:匹配拼写变体形式的字词,包括专有名词和姓名。此类搜索还可帮助将查询文本与拼写有误的姓名、采用其他拼写方式的姓名以及采用其他拼写变体的文本进行匹配。
- Soundex 搜索:匹配发音相似的字词。
全文搜索功能
Spanner 全文搜索具有以下特点:
- 排名搜索结果:计算得分以衡量查询与文档的匹配程度(例如,为 column_A 赋予更大的权重)。使用 SQL 表达式自定义排名。
- 摘要:突出显示搜索结果中的匹配文本。
- 全球支持:自动支持不同语言的令牌化,包括 CJK 分词。手动指定语言可让您进行进一步的微调。
- 治理:查找特定字词的每个出现情况。
- 拼写更正:自动更正查询中的拼写错误,使其与存储空间中拼写正确的字词匹配。例如,如果用户搜索“长颈鹿”,搜索结果会找到包含“长颈鹿”的文档。
- 添加情境同义词(包括停用词):自动添加与情境相关的同义词,以提高检索率。例如,“房子”与“这栋房子”相匹配,“猫照片”与“小猫照片”相匹配。
- 上下文数字与文本之间的转换:将数字的文本版本与数字表示法进行匹配,反之亦然。例如,“five cats”与“5 cats”匹配。
- 自动转换为复数形式:将“cat”与“cats”进行匹配。
全文搜索概念
全文搜索有以下关键概念:
- 文档是指给定行中的可搜索数据。
- 令牌是指存储在搜索索引中的文档中的每个字词。
- 词元化过程会将文档拆分为词元。
- 分词器是一种用于分词的 SQL 函数。
- 反向索引用于存储令牌。使用 SQL 查询搜索倒排索引。
全文搜索的应用场景示例
为了了解全文搜索,我们来看看一个使用数据库存储每位歌手的歌曲的应用。每行代表一首歌曲。每首歌曲都包含标题、歌词、歌手和专辑等列。该应用使用全文搜索功能,让用户可以使用自然语言查询搜索歌曲:
- 搜索支持使用
OR
运算符(例如Prince OR Camille
)的查询。应用可以直接将搜索框中的最终用户输入馈送到 SQLSEARCH
函数(使用查询语法)。 - Spanner 使用搜索索引在不同字段中查找匹配的文档。例如,应用可以发出查询,搜索主题行中包含“cry”且歌词中包含“so cold”且歌手为“Prince”的歌曲。
搜索索引的其他用途
除了全文搜索之外,搜索索引还有多种用途,例如:
为数组列中的元素编制索引。假设有一个应用使用数组列存储与项关联的标记。借助搜索索引,应用可以高效地查找包含特定标记的行。如需了解详情,请参阅数组令牌化。
查找位于一组查询条件交集内的数据。例如,您可以使用一组任意属性(颜色、尺寸、品牌、评分等)在目录中搜索商品。
使用数字搜索条件(单独使用或与全文搜索条件结合使用)。以下是搜索索引对数字搜索有用的一些示例:
- 与全文应用结合使用时。例如,若要查找主题为照片且大小超过 1 MB 的电子邮件,请使用以下查询:
- 当它是之前所述条件的交集的一部分时。例如,查找
color = "yellow" AND size = 14 AND rating >= 4.5
的商品。 - 搜索数字列的交集时。例如,假设有一个存储活动开始时间和结束时间的表。搜索索引可以高效实现查询,以查找在特定时间点
start_time <= @p AND end_time > @p
发生的事件。
如需了解详情,请参阅数字索引。
全文搜索步骤
在 Spanner 中,全文搜索需要执行以下步骤:
- 使用 Spanner 分词器函数(例如
TOKENIZE_SUBSTRING
)对文档进行分词。如需了解详情,请参阅令牌化。 - 使用
CREATE SEARCH INDEX
DDL 语句创建一个搜索索引来存储令牌。如需了解详情,请参阅搜索索引。 - 使用 Spanner
SEARCH
函数查询搜索索引中的文档。如需了解详情,请参阅查询概览。 - 使用 Spanner
SCORE
函数对查询结果进行排名。如需了解详情,请参阅对搜索结果进行排名。
限制
- 全文搜索不支持 Assured Workloads。
价格
使用全文搜索时,Spanner 不会收取额外费用,但由于需要额外的计算和存储资源,实现全文搜索会增加费用。
如需了解详情,请参阅 Spanner 价格。
后续步骤
- 了解令牌化和 Spanner 令牌化器。
- 了解搜索索引。
- 了解全文搜索查询。