我对SQL服务器中的全文索引相当新。它一直对我很有用,但最近有人对“IT经理”进行了精确匹配搜索,而搜索的“IT”部分似乎被忽略了。
e.g。
SELECT * FROM CONTAINSTABLE(vCandidateSearch, SearchText, '"it manager"')
和
SELECT * FROM CONTAINSTABLE(vCandidateSearch, SearchText, '"manager"')
返回相同的结果。我做错了什么?
答案 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