Drizzle | PostgreSQL 全文搜索
This guide assumes familiarity with:
本指南演示如何在 PostgreSQL 中使用 Drizzle ORM 实现全文搜索。全文搜索是一种用于在文档或一组文档中搜索文本的技术。文档是全文搜索系统中的搜索单位。PostgreSQL 提供了一组函数来处理全文搜索,例如 to_tsvector
和 to_tsquery
:
to_tsvector
函数将文本文档解析为标记,将标记减少为词元,并返回一个 tsvector
,该 tsvector
列出了词元及其在文档中的位置:
to_tsquery
函数将关键字转换为规范化的标记,并返回一个与 tsvector
中的词元匹配的 tsquery
。@@
操作符用于直接匹配:
目前,Drizzle 不支持 tsvector
类型,因此您需要动态地转换 text
列中的数据。为了提高性能,您可以像这样在您的列上创建一个 GIN
索引:
schema.ts
migration.sql
db_data
要在 PostgreSQL 中使用 Drizzle ORM 实现全文搜索,您可以使用 to_tsvector
和 to_tsquery
函数与 sql
操作符:
要通过任何关键字进行匹配,您可以使用 |
操作符:
要匹配多个关键字,您可以使用 plainto_tsquery
函数:
要匹配短语,您可以使用 phraseto_tsquery
函数:
您还可以使用 websearch_to_tsquery
函数,它是 to_tsquery
的简化版本,具有类似于网络搜索引擎使用的替代语法:
要在多个列上实现全文搜索,您可以对多个列创建索引,并使用 to_tsvector
函数连接这些列:
schema.ts
migration.sql
db_data
setweight
函数用于为 tsvector 的条目标记一个给定的权重,其中权重是字母 A、B、C 或 D 之一。这通常用于标记来自文档不同部分的条目,例如标题与正文。
这就是您如何在多个列上执行查询:
要对搜索结果进行排名,您可以使用 ts_rank
或 ts_rank_cd
函数和 orderBy
方法:
ts_rank
函数侧重于查询术语在整个文档中的频率。而 ts_rank_cd
函数则侧重于查询术语在文档中的接近程度。