3

I'm fairly new to Full Text Index in SQL server. It has been working really well for me however, recently someone did an exact match search for "IT Manager" and the "IT" part of the search seems to be ignored.

e.g.

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

and

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

return the same results. What am I doing wrong?

4

2 回答 2

4

问题是全文引擎将“它”视为“噪音”或停用词,并忽略它。

假设您使用的是 SQL 2008+,请在此处查看有关停止列表和停止词的文档: https ://msdn.microsoft.com/en-us/library/ms142551(v= sql.100).aspx

这些列表包含各种语言中的各种“填充”词(例如“a”、“the”、“it”等),这些词在全文搜索中通常没有用,因此被忽略。

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

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

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

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

于 2015-11-13T12:29:35.937 回答
1

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

如果我有一个价值 大红房子

示例匹配

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

不匹配示例

"the big yellow"

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

于 2015-11-13T11:58:04.713 回答