Microsoft's documentation for CONTAINS在他们的示例中包括以下两个子句。
CONTAINS(Name, ' "Mountain" OR "Road" ')
还有……
CONTAINS(Description, ' Aluminum AND spindle ');
请注意,第一个示例将两个搜索词都放在双引号内,而第二个示例则没有。我似乎找不到任何地方可以解释两者之间的区别。
由于既没有使用 FORMSOF(INFLECTIONAL, ...)
也没有使用 FORMSOF(THESAURUS, ...)
,我只能假设单词是按字面意思比较的两种情况。这意味着两个版本是平等的。那么为什么在第一个示例中将它们用双引号括起来呢?
最佳答案
据我了解,只有当搜索短语包含通配符或多个词时,才严格要求使用引号。如果搜索短语是单个词并且没有使用通配符,那么严格来说,不需要双引号。
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 关于使用通配符时需要双引号:
If the text and asterisk are not delimited by double quotation marks, so the predicate reads CONTAINS (column, 'text*'), full-text search considers the asterisk as a character and searches for exact matches to text*.>
关于sql-server - SQL Server 全文搜索语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9010413/