全文搜索概览

本页介绍了什么是全文搜索以及其运作方式。

概览

通过全文搜索,您可以构建一个可以搜索表格以查找 字词、短语或数字,而不是只搜索 结构化字段。全文搜索会返回最新的 向您的应用提交事务一致的数据。Spanner 全文搜索功能还包括拼写更正、 自动检测搜索输入的语言以及对搜索结果进行排名。 Spanner 会自动扩展文本搜索,以包含近似字词匹配。

您需要在任何要设为可用的列上创建搜索索引 进行全文搜索。Spanner 会分析这些列中的数据,以识别要添加到搜索索引中的各个字词。一旦新数据或修改后的数据提交到数据库,Spanner 就会使用这些数据更新搜索索引。

  • 基本文本搜索:使用整个或部分文本进行搜索 更可靠地接收结果。查询谓词示例:
    • 匹配所有字词 [tricolor rat terrier]
    • 完全匹配的字词或短语 ["捕鼠梗犬"]
    • 以下任意字词 [miniature OR standard]
    • 相邻字词 [world AROUND(3) cup]
    • 子字符串 [start*]
  • 数字搜索:执行数字等式和不等式搜索。等式搜索会匹配数字。范围搜索和不等式搜索会匹配特定范围内的数字。
  • 基于 n 元语搜索:匹配拼写变体形式的字词,包括专有名词和姓名。这种类型的搜索还有助于匹配查询文本 包含拼写错误的名称、拼写不同的名称,以及包含 拼写变体
  • Soundex 搜索:匹配发音相似的字词。

全文搜索功能

Spanner 全文搜索具有以下特性:

  • 排名搜索结果:计算得分以衡量查询与文档的匹配程度(例如,为 column_A 分配更大的权重)。使用 用于自定义排名的 SQL 表达式。
  • 摘要:突出显示搜索结果中的匹配文本。
  • 全球支持:自动支持不同环境下的令牌化 包括 CJK 细分。通过手动指定语言,您可以执行 微调。
  • 治理:查找特定字词的每次出现。
  • 拼写更正:自动更正查询中的拼写错误,以匹配存储空间中拼写正确的字词。例如,如果 用户搜索“girafe”,搜索会找到包含“giraffe”的文档。
  • 添加上下文相关同义词,包括无效字词:自动添加 与情境相关的同义词来提高回想度。例如,“房子”与“这栋房子”相匹配,“猫照片”与“小猫照片”相匹配。
  • 上下文数字与文本之间的转换:将数字的文本版本与数字表示法进行匹配,反之亦然。对于 例如“five cats”匹配“5 cats”。
  • 自动复数转换:与“cat”匹配更改为“cats”。

全文搜索概念

全文搜索有以下关键概念:

  • 文档是指给定行中的可搜索数据。
  • 令牌是指存储在搜索索引中的文档中的每个字词。
  • 标记化过程将文档拆分为多个词元。
  • tokenizer 是用于标记化的 SQL 函数。
  • 反转索引会存储词元。使用 SQL 查询搜索 反转索引。

为了解全文搜索,我们来看一个 使用数据库来存储每位歌手的歌曲。每一行代表一首歌曲。每首歌曲都包含标题、歌词、歌手和专辑等列。应用 使用全文搜索,让用户使用自然语言搜索歌曲 查询:

  • 搜索支持使用 OR 运算符(例如 Prince OR Camille)的查询。应用可以直接将搜索框中的最终用户输入馈送到 SQL SEARCH 函数(使用查询语法)。
  • Spanner 使用搜索索引查找匹配的文档 不同领域的表现例如,应用可能会发出 用于搜索“哭泣”的查询在主题行中注明“so 冷” 歌词中的“Prince”

搜索索引的其他用途

搜索索引除了全文搜索之外,还有各种各样的用途,例如 以下:

  • 将数组列中的元素编入索引。假设有一个使用 存储与商品关联的标记的数组列。对于搜索索引, 可以有效地查找包含特定标记的行。有关 请参阅 数组标记化

  • 查找位于一组查询条件交集范围内的数据。例如,您可以使用任意一组属性 (颜色、尺寸、品牌、评分等) 目录。

  • 使用数字搜索条件,单独使用或与全文搜索条件结合使用。以下是搜索索引对数字搜索有用的一些示例:

    • 与全文应用结合使用时。例如,若要查找主题为图片且大小超过 1 MB 的电子邮件。
    • 当它属于上述条件的交集时。 例如,查找 color = "yellow" AND size = 14 AND rating >= 4.5 的商品。
    • 搜索数值列的交集时。对于 以存储事件开始时间和结束时间的表为例。搜索索引可以高效实现查询,以查找在特定时间点 start_time <= @p AND end_time > @p 发生的事件。

    如需了解详情,请参阅数字索引

全文搜索步骤

在 Spanner 中,全文搜索需要执行以下步骤:

  1. 使用 Spanner 分词器函数(例如 TOKENIZE_SUBSTRING)对文档进行分词。如需了解详情,请参阅令牌化
  2. 使用 CREATE SEARCH INDEX DDL 语句创建一个搜索索引来存储令牌。如需了解详情,请参阅 搜索索引
  3. 使用 Spanner SEARCH 函数查询搜索索引中的文档。如需了解详情,请参阅查询概览
  4. 使用 Spanner 对查询结果进行排名 SCORE 函数。如需了解详情,请参阅对搜索结果进行排名

限制

价格

使用全文搜索时,Spanner 不会收取额外费用,但由于需要额外的计算和存储资源,实现全文搜索会增加费用。

如需了解详情,请参阅 Spanner 价格

后续步骤