搜索是项非常重要的功能,所以像和solr和es这样的基于的工具变得很流行。但使用这些大规模“杀伤性”的搜索武器,需要额外的成本。有时候我们只想用下简单的搜索,但是关系型数据库的的like和in又太慢,更别提find_in_set()函数,任何在密集sql查询里面使用函数都是罪大恶极。
那么postgresql就是你的首选了,使用它的理由是
- 我们只需使用postgresql,不必安装其它的搜索引擎,就能支持良好的千万级搜索性能。
- 使用其它的数据库(比如mysql),全文索引十分不稳定。
这里不再介绍什么是全文索引,请自行gg or dd
注意这里还有个坑:如果某个索引字段值为空,会导致索引失效,查不出数据。所以一定不能为null
PostgreSQL 中的全文搜索
全文搜索(FTS) 允许对文档进行预处理并保存索引以供以后快速搜索和排名。请参阅官方文档(https://www.postgresql.org/docs/13/textsearch-intro.html),该文档非常完整,提供了理解和实施 FTS 所需的所有信息。
PG(Postgres)中 FTS 的主要构建块是:
- tsvector,它代表一个可搜索的文档
- tsquery,这是针对文档执行的搜索查询
转换为文档类型
to_tsvector函数解析输入文本并将其转换为表示可搜索文档的搜索类型。说人话就是to_tsvector是PostgreSQL内置的一个分词函数,它可以将一段文本按照某种