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
我对 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