SQL Server全文索引包含包含“it”的搜索完全匹配

时间:2015-11-13 10:03:40

标签: sql-server full-text-search containstable

我对SQL服务器中的全文索引相当新。它一直对我很有用,但最近有人对“IT经理”进行了精确匹配搜索,而搜索的“IT”部分似乎被忽略了。

e.g。

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

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

返回相同的结果。我做错了什么?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

如果我有价值 红色的大房子

示例匹配

$query = "SELECT option_value FROM db_nameprivate.wpm_options where       option_name like 'options_go_tracking_%_tracking_pixel'";
 $results = $wpdb->get_results( $query );

if($results){
foreach($results as $row) {

    echo $row['option_value'];
     // Trying to output the results of query here, the content of each  "option_value" field
}
}

不匹配的示例

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

如果你只需要那个"那个红色的大房子"那么你可能最好在该列上创建一个非聚集索引并使用regular = predicate