我在 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/