sql-server - SQL Server 全文搜索语法

标签 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, ...),我只能假设单词是按字面意思比较的两种情况。这意味着两个版本是平等的。那么为什么在第一个示例中将它们用双引号括起来呢?

最佳答案

据我了解,只有当搜索短语包含通配符或多个词时,才严格要求使用引号。如果搜索短语是单个词并且没有使用通配符,那么严格来说,不需要双引号。

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/

相关文章:

sql - 确定自上次访问 SQL Server 以来的行更改

sql-server - 是否可以从包中启动计划的 Windows 任务?

sql-server - Node Feathers Sequelize API 无效的列名

sql-server - 不等于在 sql 查询中不起作用

mysql - 使用 IN BOOLEAN MODE 时找不到 FULLTEXT 索引

mysql - Perl MySQL 全文搜索

performance - 全文索引缓慢。寻找替代品

sql-server - 如何向应用程序角色授予 db_owner 权限?

sql-server - SQL Server 2008 - 多个级联 FK - 我需要触发器吗?

sql-server - Sql Server Xml 转表逻辑