首页 > 解决方案 > 基于多列的全文搜索 VS 模糊搜索

问题描述

我有一个包含这些列的 Employee 表:

我有一个带有搜索文本输入的表单,用户可以在其中键入一列或所有列,例如:

在这种情况下,SQL Server 中的全文搜索和模糊搜索有什么区别?

标签: sqlsql-servertsql

解决方案


所以你必须选择:

  1. 使用full text search

如果数据量很大,并且您正在寻找可扩展的数据搜索,则此方法更可取,但更难维护。所以我建议您computed column在该表中添加一个并在其上放置全文索引:

alter table tablename
add column cmptcolumn as concat_ws(',',EmployeeId,FullName,PhoneNumber,...)

--full text catalog 
CREATE FULLTEXT CATALOG catalogName AS DEFAULT;  

-- full text index
create full text index on tablename (cmptcolumn)

-- search :

select * from tablename
where contain(cmptcolumn, 'SearchString');

通过全文搜索,您还可以搜索同义词以及彼此相关的单词:

select * from tablename
where freetext(cmptcolumn, 'SearchString');

在此处阅读有关不同全文搜索选项的更多信息

  1. 使用搜索查询。再次女巫,您可以从计算列中受益或分别在每列中搜索:
select *
from tablename
where (Fullname like '%'+@fullNameSearchString+'%' or @fullNameSearchString is null)
and (Department = @DepartmentSearchString or @DepartmentSearchString is null)
and ...

虽然第一种方法是搜索 insode 字符串的更快方法,但第二种方法提供更准确的结果。但是“FreeText”也会查找单词的含义,在这种情况下它可能会更慢。

在第二种方法中,无论您采用哪种方式(有或没有计算列),都必须在列上建立索引以提高性能,但是使用 like '%%' 通常不能按应有的方式使用索引。


推荐阅读