在 SQL 中执行全文搜索允许您使用专门的索引和搜索功能有效地查询大型基于文本的数据,例如文档或产品描述。与简单的 LIKE
或 =
运算符不同,全文搜索处理自然语言查询,支持部分单词匹配,并通过利用预构建索引来提高性能。要使用它,您通常需要在目标列上创建全文索引,然后使用 CONTAINS
(在 SQL Server 中) 或 MATCH ... AGAINST
(在 MySQL 中) 等函数进行查询。确切的语法因数据库系统而异,但核心原则保持一致。
首先,您必须在要搜索的列上设置全文索引。例如,在 SQL Server 中,您可以使用如下语句创建全文目录和索引:
CREATE FULLTEXT CATALOG ft_catalog;
CREATE FULLTEXT INDEX ON Products(Description) KEY INDEX PK_Products ON ft_catalog;
此索引将文本标记化,将其分解为可搜索的术语。在 MySQL 中,您可以使用 ALTER TABLE Products ADD FULLTEXT(Description);
。PostgreSQL 使用 tsvector
列类型和 GIN 索引来实现类似的功能。索引创建是一次性过程,但需要规划——必须显式包含列,并且某些数据库需要事先启用全文功能。
索引准备就绪后,使用全文函数进行查询。在 SQL Server 中,CONTAINS(Description, 'organic AND sustainable')
查找同时出现这两个术语的行。FREETEXT
函数处理同义词和屈折形式,例如搜索“running”并匹配“ran”。在 MySQL 中,WHERE MATCH(Description) AGAINST('+organic +sustainable' IN BOOLEAN MODE)
执行布尔搜索。PostgreSQL 使用 to_tsquery
和 @@
运算符,例如 WHERE Description @@ to_tsquery('organic & sustainable')
。这些函数支持高级功能,如邻近搜索、加权术语和排除单词。
全文搜索还考虑特定于语言的规则(例如,词干提取、停用词)。例如,在英语中搜索“mouse”可能会忽略“mice”,但这取决于数据库的配置。性能通常优于 LIKE
,因为索引避免了全表扫描。但是,在数据更新期间维护索引会增加开销,因此请平衡查询需求与写入频率。始终使用真实世界的数据进行测试,以优化索引刷新间隔或自定义停用词列表等设置。