2012-01-25 140 views
3

Microsoft's documentation for CONTAINS在其示例中包含以下兩個子句。SQL Server全文搜索語法

CONTAINS(Name, ' "Mountain" OR "Road" ') 

而且還...

CONTAINS(Description, ' Aluminum AND spindle '); 

注意,第一個例子放在雙引號內的兩個搜索條件,而第二個例子中沒有。我似乎無法找到解釋這兩者之間的區別的地方。

既然不使用FORMSOF(INFLECTIONAL, ...)FORMSOF(THESAURUS, ...),我只能假設在兩種情況下字面都進行了比較。這意味着兩個版本都是平等的。那麼爲什麼在第一個例子中將它們包含在雙引號中呢?

回答

3

我的理解是,只有當搜索短語包含通配符或多個單詞時,引號纔是嚴格要求的。如果搜索短語是單個單詞並且不使用通配符,那麼嚴格來說,不需要雙引號。

CONTAINS(LastName, 'Anders') --double quotes not required 
CONTAINS(LastName, '"Anders*"') --double quotes required since wildcard used. Match Anders, Anderson, etc 
CONTAINS(Title, '"End of time"') --double quotes required, since multiple words 

當然,雙引號仍可即使在不需要時,他們使用:

CONTAINS(LastName, '"Anders"') 

下面是關於需要雙引號報價BOL時通配符使用:

如果文本和星號沒有用雙引號分隔,所以謂詞讀取CONTAINS(column,'text *'),全文搜索將星號視爲字符並搜索與文本*完全匹配。