SQL 服务器全文索引包含搜索完全匹配 "it"

SQL Server Full Text Index Contains search exact match containing "it"

我对 SQL 服务器中的全文索引还很陌生。它对我来说一直很有效,但是最近有人对 "IT Manager" 进行了完全匹配搜索,搜索的 "IT" 部分似乎被忽略了。

例如

SELECT * FROM CONTAINSTABLE(vCandidateSearch, SearchText, '"it manager"') 

SELECT * FROM CONTAINSTABLE(vCandidateSearch, SearchText, '"manager"') 

return同样的结果。我做错了什么?

"" 并不意味着完全匹配。它只是在文本中查找该短语。

如果我有价值 大红房子

示例匹配

"big red house"
"big"
"house"
"red house"

不匹配示例

"the big yellow"

如果您只需要 "The big red house" 匹配,那么您最好在该列上创建一个非聚集索引并使用常规 = predicate

问题是全文引擎将 "it" 视为 "noise" - 或停用词,并忽略它。

假设您使用的是 SQL 2008+,请参阅此处有关非索引字表和非索引字的文档:https://msdn.microsoft.com/en-us/library/ms142551(v=sql.100).aspx

这些列表包含各种语言的各种 "filler" 词(例如 "a" "the" "it" 等),这些词在全文搜索中通常没有用,会被忽略.

我的经验是,这些默认列表非常适合搜索较大的文本,但对于需要更具体的产品(或工作)标题等内容通常不太有用。

您可以创建自己的非索引字表,其中包含(或不包含)适合您特定需要的任何停用词。

对于职位搜索,对于该特定列完全不使用停用词可能是合适的。创建索引时,您可以选择将哪个非索引字表(包含非索引字)与特定的全文索引相关联。如果需要,您可以创建一个空列表,并仅在一列的索引中使用它(尽管您必须调整查询以考虑到这一点)。

万一您使用的是 SQL 2005 或更低版本,它使用更原始的 "noise words" 系统,该系统仅保存在文本文件中:https://msdn.microsoft.com/en-us/library/ms142551(v=sql.90).aspx