借助全文搜索 (FTS),您可以识别满足查询条件的自然语言文档。这种方法比标准字符串匹配更有效,因为它考虑了语言细微差别,例如忽略“the”等常用字词,并匹配字词的不同形式,例如“run”“running”或“ran”。
AlloyDB for PostgreSQL 支持所有全文搜索功能。除了支持 GIN 和 GiST 索引之外,AlloyDB 还提供 RUM 扩展程序,可在 PostgreSQL 17 或更低版本上实现高性能全文搜索,并在 PostgreSQL 17 或更高版本上实现最佳匹配 25 (BM25) 相关性排名。
全文搜索的核心概念
为了有效地实现全文搜索 (FTS),您应该了解 PostgreSQL 如何处理和搜索文本。搜索单位(即文档)通常是文本列或行中列的组合。索引构建过程会解析此文档,以将字词(或词素,即字词的基本形式)与相应行相关联。
此过程涉及一个预处理流水线,该流水线通过以下方式将原始文本转换为可搜索的格式:
- 将文本分解为词元。
- 移除常见停用字词。
- 将字词归一化为词根形式;例如,“run”是“run”“runs”“running”和“ran”的词位。
使用全文搜索还需要了解专门的数据类型、运算符和各种索引编制策略,包括内置的 PostgreSQL 索引和高性能的 RUM 索引。
PostgreSQL 使用两种主要数据类型和一个匹配运算符来管理 FTS:
tsvector:以可搜索格式表示文档,即以不同的词素的排序列表表示。tsquery:表示搜索字词,包括可用于组合词素的布尔运算符。@@:检查tsvector是否与tsquery匹配,从而实现语言感知型搜索。
AlloyDB 支持内置 PostgreSQL 支持的所有全文搜索索引类型。索引的选择取决于搜索速度、索引构建时间、更新速度以及所需的特定搜索功能(例如短语搜索或相关性排名)之间的平衡。
为了优化搜索相关性和准确性,您还可以从以下选项中进行选择:
- RUM 索引:通过直接在索引中存储位置信息来改进标准 GIN 索引,让您无需访问表数据即可执行更快的短语搜索和相关性排名。PostgreSQL 17 或更低版本支持此扩展程序。 如需了解详情,请参阅创建和管理 RUM 索引。
- BM25 索引:实现概率性 Best Matching 25 算法,根据词频和长度饱和度对文档进行排名,提供行业标准的关键字匹配精确度。PostgreSQL 17 或更高版本支持此扩展程序。如需了解详情,请参阅创建和管理 BM25 索引。
结合使用全文搜索和语义搜索
最强大的搜索实现通常会结合使用 RUM 索引的全文搜索和向量搜索。使用混合搜索,将语义理解和精确关键字匹配的优势相结合,合并不同的结果集以进行全面排名。
例如,在电子商务应用中,您可以先使用包含 RUM 的全文搜索来查找包含特定关键字(例如“跑鞋”)的产品,然后使用向量搜索来根据与用户更详细的查询(例如“适合长跑训练的舒适鞋子”)的语义相似度查找结果。然后,数据库使用倒数排序融合 (RRF) 算法将这两个搜索组件的排名结果融合为一个统一的列表,从而生成最终排名。
如需详细了解如何使用这种混合方法,请参阅运行混合向量相似性搜索。
后续步骤
- 了解如何创建和管理 RUM 指标。
- 了解如何创建和管理 BM25 索引。
- 了解如何运行混合向量相似度搜索。