sql-server - 全文搜索中的 CONTAINS 不会返回所有结果

标签 sql-server full-text-search contains

我在 SQL Server 2008 中使用全文搜索。以下查询

select * From MyTable where contains( *, 'FLOW AND VALVE')

返回两行:

1. FLOW CONTROL VALVE
2. FLOW VALVE

但以下查询

select * From MyTable where contains( *, '"FLOW AND VALVE"'))

仅返回一行:

1. FLOW CONTROL VALVE

为什么第二个查询不返回第二行?

最佳答案

如果您使用的是 SQL Server 2008,您可以通过运行获得一些线索

SELECT * 
FROM sys.dm_fts_parser('FLOW AND VALVE',1033,0,0)

SELECT * 
FROM sys.dm_fts_parser('"FLOW AND VALVE"',1033,0,0)

CONTAINS( *, 'FLOW AND VALVE')被解释为两个 <simple_term>搜索与 bool 条件结合在一起。即CONTAINS( *, 'FLOW') AND CONTAINS( *, 'VALVE')

CONTAINS( *, '"FLOW AND VALVE"'))被解释为短语搜索,其中“And”被视为干扰词而被忽略。

至于为什么第二个匹配“FLOW CONTROL VALVE”而不匹配“FLOW VALVE”From this article

Although it ignores the inclusion of stopwords, the full-text index does take into account their position.

所以本质上停用词的存在充当通配符词匹配。

关于sql-server - 全文搜索中的 CONTAINS 不会返回所有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8629299/

相关文章:

jQuery 如果选项文本包含字符串,则选择它

php - 如何使用 Eloquent 实现包含搜索

sql - 从 beeline(cli) 将表导出到 csv

sql-server - SQL Server : Improve PROCEDURE without using CURSOR

mysql - MySQL全文检索中,如何检索只包含特定单词的文档?

delphi - TDictionary 保存到文件

sql - 创建表后立即使用表 : object does not exist

sql - T-sql 枢轴函数

full-text-search - RavenDB(4.0-测试版): How to full-text-search dynamic attributes

oracle - 我怎样才能让 ORACLE CONTAINS 匹配文字词 'NOT'