我在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
为什么第二个查询不返回第二行?
答案 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
虽然它忽略了包含停用词,全文索引 确实考虑到了他们的立场。
所以停止词的存在基本上就像一个通配符匹配。