SQL Server全文搜索语法

时间:2012-01-25 21:16:05

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

Microsoft's documentation for CONTAINS在其示例中包含以下两个条款。

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

还有......

CONTAINS(Description, ' Aluminum AND spindle ');

请注意,第一个示例将两个搜索项放在双引号内,而第二个示例则不是。我似乎找不到任何地方,它解释了两者之间的区别。

由于未使用FORMSOF(INFLECTIONAL, ...)FORMSOF(THESAURUS, ...),我只能假设在两种情况下都会对字词进行字面比较。这意味着两个版本都是平等的。那么为什么在第一个例子中将它们包含在双引号中呢?

1 个答案:

答案 0 :(得分: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(列,'text *'),全文搜索将星号视为字符并搜索与文本*的完全匹配。> ;