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

时间:2011-12-25 10:57:19

标签: 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

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

1 个答案:

答案 0 :(得分:5)

如果您使用的是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>个搜索以一个布尔条件连接在一起。即CONTAINS( *, 'FLOW') AND CONTAINS( *, 'VALVE')

CONTAINS( *, '"FLOW AND VALVE"'))被解释为短语搜索,“And”被忽略为噪音词。

至于为什么第二个匹配“流量控制阀”而不是“流量阀”From this article

  

虽然它忽略了包含停用词,全文索引   确实考虑到了他们的立场。

所以停止词的存在基本上就像一个通配符匹配。